我正在为Joomla2.5创建一个MVC组件,作为我构建的另一个PHP数据库系统的前端。我正在构建一个本机Joomla组件,它在其他系统的类中调用方法,而不是将另一个系统的web接口包装在包装器组件中。
因此,我在我的一个视图中实现了一种超文本标记语言形式,它显然接受一些输入,但也接受文件上传。从这里开始,组件应该将这个输入发送到我的类的方法来处理它,然后响应将被馈送到第二个Joomla组件视图。
在我看来,输入的处理应该在模型中完成,并且接收处理后的输出可能也应该由模型完成。然后,控制器将模型数据提供给第二个视图?
我已经完成了html" target="_blank">开发MVC组件的教程,但它并没有给我太多关于这应该如何工作的想法。有人能给我一个粗略的psuedocode的想法,这应该如何组合在一起,或者给我指一个适当的教程或另一个组件的例子,做类似的事情?
我认为您不需要使用模型来检索数据。这应该在控制器部分完成。
假设下面是一个函数是一个控制器(你可以把这个函数称为任务)。
public function someFunction(){
// retrive data from the form coming via $_POST (and consider sanitizing it)
$data = JFactory::getApplication()->input->get('id', null, 'post');
/*get model. You can call any model you want.
You can even call multiple models using this function
*/such as $model2 = getModel('SecondModel'); $model3 = getModel('ThirdModel');
$model = $this->getModel('FirstModel'); //FirstModel should be an existing model
$model->save($data);
$formatted_data = $model->getData();
$view=& $this->getView('OtherView','html'); //call any view you like
$layout=JRequest::getVar('tmpl','default'); //instead of default you can use other template you prepared (such as edit...)
$view->setLayout($layout); //bind the layout to the view
//Pass the value to view. You can access this value in view as $this->formatted_data; later
$view->set('formatted_data',$formatted_data);
/*Call the view's display.
If you prepare other function in your view other than display,
you can use this function too. e.g. $view->display_report();
But make sure you call parent::display() inside the function.
*/
$view->display();
}
简短回答,是的,您的模型应该处理项目详细信息的所有检索和保存,即其在数据库或物理文件中的行。
所以,对于更长的答案,以com_content
的工作方式为例。
在前端创建新文章(例如,通过“用户菜单”的“提交文章”项)。这是作为GET
请求发送的,其值类似于:
format="html"
itemid="999"
option="com_content"
view="form"
layout="edit"
此请求如下所示:
>
索引。php
接收请求并
com\u内容/内容。当需要组件(即com_内容入口点)时,会调用php
。
内容。php
通过JController
类创建控制器。
JController
查看输入(即在原始的GET
请求中发送的参数),找出它在哪个组件中,并尝试首先在扩展文件夹中加载一个名为controller.php
的文件,然后在该文件中查找合适的类。(在本例中ContentController
)
content.php
然后告诉$控制器
对象调用具有相关任务的执行()
,使用此$控制器-
从
GET
请求可以看出,在这种情况下没有设置task
,因此使用\u默认的
任务(
$doTask=$this)-
这导致调用
ContentController
类(com_content/controller.php
)中的show()
方法。
在一些基本检查之后,
display()
然后调用自身的parent
版本,即parent::display($cachable,$safeurlparms)
JContoller
版本的display()
完成所有基本工作,如获取视图名称(form
)和布局(edit
),并使用它们加载右视图对象(ContentViewForm
)。
然后加载模型
在进行了更多的设置之后,调用了视图
ContentViewForm
的display()
方法,在该方法中加载模型数据(如果我们正在编辑一篇文章,对模型的相同调用将基于GET
中包含文章ida_id=99
的额外参数加载现有文章)
此时,它还会加载文章表单
(com\u content/models/forms/Article.xml
),以便在tmpl
文件编辑中使用。php
。
因此,为了设置输入端,
内容
字段来自模型(尽管新文章的模型是空的),字段的属性以模型匹配的形式定义。
对项目表单的更改的保存采用了非常相似的路径。
>
GET
请求的一部分包含您的文章id(a_id=99
)和指向Joomla组件的选项参数(选项=com_content
)
POST
部分包含作为数组的表单(jform
),正在执行的任务(task=article.save
)和一些其他内务管理参数。
因此,这次由JController实例化的控制器类型是一个ContentControlller文章,它扩展了JControlllerForm(用于处理表单提交等)。请记住,点符号任务值是表单[sub]的controller.method.
ContentControllerArticle
对象的save()
方法在调用JControllerPerform
中的父对象save()
方法之前会被短暂调用。
此时,方法执行诸如检查访问权限,根据表单中定义的任何验证验证数据,然后加载模型并将表单数据传递给模型。
这有用吗?
我需要帮助插入以下数据到数据库我有两个表employee和employee_skills(1个employee可以有很多技能) mapper.xml
开发Web的一个原则就是,不能信任用户输入的任何信息,所以验证和过滤用户的输入信息就变得非常重要,我们经常会在微博、新闻中听到某某网站被入侵了,存在什么漏洞,这些大多是因为网站对于用户输入的信息没有做严格的验证引起的,所以为了编写出安全可靠的Web程序,验证表单输入的意义重大。 我们平常编写Web应用主要有两方面的数据验证,一个是在页面端的js验证(目前在这方面有很多的插件库,比如Validati
先来看一个表单递交的例子,我们有如下的表单内容,命名成文件login.gtpl(放入当前新建项目的目录里面) <html> <head> <title></title> </head> <body> <form action="/login" method="post"> 用户名:<input type="text" name="username"> 密码:<input type=
问题内容: 我创建了一个文件,创建变量时出现错误。但是在我的其他.java文件中,这些错误都没有出现。在枚举Foo中,唯一不会引起错误的是Foo构造函数不带参数并且枚举内没有其他变量。 错误的范围从字符串(无效的修饰符)到要删除的布尔值。 问题答案: 您缺少枚举中最重要的元素:枚举实例。 射击,仅添加分号即可解决编译错误,但是如果没有枚举实例,则枚举是无用的。 例如,
主要内容:jQuery Mobile 文本输入框,实例,文本域,实例,搜索输入框,实例,单选按钮,实例,复选框,实例,更多实例,实例,实例,实例,实例jQuery Mobile 文本输入框 输入字段是通过标准的 HTML 元素编码的,jQuery Mobile 将为它们添加样式使其看起来更具吸引力,在移动设备上更易使用。您也能使用新的 HTML5 的 <input> 类型: 实例 <form method="post" action="demo_form.php"> <div class="ui
我有一个谷歌表单,我要求用户包含他们的“全名”,以保持表单简短甜蜜(没有名字/姓氏的两个输入)。您可以使用正则表达式验证谷歌表单中的答案,但我不确定从哪里开始。 我希望在输入中至少有两个单词,每个单词至少有2个字符,并且我不想屏蔽任何特殊字符(以便像O'Leary这样名字的人仍然可以编写它)。基本上,我只想确保一个字段中包含两个单词,每个单词至少有2个字母。 我没有使用正则表达式或模式的经验,因此