Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller Joomla术语:视图、布局、任务和组件开发_Model View Controller_Joomla_Components - Fatal编程技术网

Model view controller Joomla术语:视图、布局、任务和组件开发

Model view controller Joomla术语:视图、布局、任务和组件开发,model-view-controller,joomla,components,Model View Controller,Joomla,Components,我是一名开发人员,我对MVC模式非常有信心,并且已经使用php框架(如symfony或yii)从头开发了很多webapp 我对joomla mvc和术语有点困惑,在谷歌搜索了很多之后,阅读了joomla图书扩展指南,在joomla网站上阅读了我的疑问仍然存在 让我困惑的是组件mvc结构,以及我必须如何建立关于joomla mvc的“我的思维方式”,以便以joomla的方式做事 特别是,我习惯于根据控制器/动作进行推理(如symfony和yii框架) 因此,我的所有webapp url的最终列表将

我是一名开发人员,我对MVC模式非常有信心,并且已经使用php框架(如symfony或yii)从头开发了很多webapp

我对joomla mvc和术语有点困惑,在谷歌搜索了很多之后,阅读了joomla图书扩展指南,在joomla网站上阅读了我的疑问仍然存在

让我困惑的是组件mvc结构,以及我必须如何建立关于joomla mvc的“我的思维方式”,以便以joomla的方式做事

特别是,我习惯于根据控制器/动作进行推理(如symfony和yii框架)

因此,我的所有webapp url的最终列表将是

 controller1/action1
 controller1/action2
 controller1/action3

 controller2/action1
 controller2/action2
每个控制器的操作将决定要渲染的视图以及用于显示视图的布局。 特别是在这些框架中,布局的定义正是布局的平均值。视图是页面的“核心部分”

因此,我可以拥有一个包含用户列表的视图,我可以将此视图放在移动布局或桌面布局中,或者为移动构建一个视图,并仅将其放在移动布局中,等等

关于my webapp中目录结构的最终结果类似于以下内容:

 controllers/
    controller1
    controller2
    controller3
models/
    modelForTableA
    modelForTableB
views/
   controller1/
     viewForAction1
     viewForAction2
layouts/
    mobileLayout.php
    desktopLayout.php
对我来说,这是非常清楚的理解

最后,我的问题是:

  • joomla中的目录结构如何
  • joomla对视图、布局和任务的定义是什么
我需要澄清的是,一般来说,我不需要解释MVC的工作原理,但是如果我想获得与以前相同的结果,我必须如何组织我的代码和工作

假设我想构建一个具有以下“url”的组件

非常感谢您

Small insight

1) 目录结构

  controllers/
        controller1
        controller2
        controller3
    models/
        modelForTableA
        modelForTableB
    views/
       layout1
2) 视图、布局和任务

检查这个

3) 更多的路由与SEF

希望有帮助。

小洞察

1) 目录结构

  controllers/
        controller1
        controller2
        controller3
    models/
        modelForTableA
        modelForTableB
    views/
       layout1
2) 视图、布局和任务

检查这个

3) 更多的路由与SEF


希望有帮助。

若姆拉的路线略有不同。SEF URL是从菜单项构建的,菜单项依次指向视图/布局组合。
这就扭转了局面:控制器没有绑定到特定的视图/布局

让我们以您提到的
addUser
功能为例来说明流程;我将参考这些文件(但您将有更多):

如您所见,布局位于每个视图的
tmpl
文件夹中

router.php

让我们从最后一个文件开始:
router.php
定义了我们的自定义SEF规则,因此,在Joomla将调用传递给我们的组件(通常使用参数
?option=com\u componentname
)我们可以根据需要接管和解释URL。这是一个有点难开始,但确实提供了最大的灵活性和力量。对于这个简单的例子,我们根本不需要实现它:现在回到我们的注册

第一步:显示“新用户”表单。

您通常会将其绑定到一个菜单项,指向
/views/useradd/tmpl/default.php
/views/useradd/tmpl/default.xml
包含布局的定义,因此它在菜单管理器中可用。通常每个视图只有一个布局

控件传递给view/views/useradd/view.html.php,然后视图将加载自己模型的实例(根据视图名称自动选择,当然可以加载其他模型)以收集任何初始化数据

然后视图呈现布局,并将其呈现给用户。 布局的职责包括生成具有适当的
操作
(端点)和安全令牌(如果适用)的表单:

<form action="index.php?option=com_mycomponent">
<input type="hidden" task="user.save">
<?php echo JHtml::_('form.token');?>
后跟任何其他参数。这将在get和post中都起作用

controller
/controllers/user.php
emailAvailable()
方法将返回一个
json
结构,然后调用
exit()
,因为我们根本不希望CMS启动。另一种解决方案是在调用中添加param
&format=json

{"email":"johndoe@example.com", "available":true}
保存数据

当用户提交表单时,处理首先由控制器处理,因为指定了任务。(请参见上面的
task=user.save
)。Joomla将调用控制器
/controllers/user.php
中的方法
save()

然而,这一次,我们的控制器负责将信息返回给用户。处理数据后,它可以选择重新呈现显示错误的注册表或感谢页面。在这两种情况下,控制器都只是简单地设置重定向,让Joomla在适当的时候处理渲染

$this->setRedirect(JRoute::_('index.php?option=com_yourcomponent&view=useradd', false));
更多控制

每次未指定控制器任务时,都会调用主控制器的
display()
方法。您可以在那里添加自定义逻辑


Joomla在视图渲染期间激发多个事件;这些可以被一个系统插件截获,或者——如果你添加了调用——其他类型的插件也可以截获。您甚至可以创建自己类型的插件。不要试图从控制器手动实例化视图,因为这可能会抑制插件启动。

Joomla中的路由略有不同。SEF URL是从菜单项构建的,菜单项依次指向视图/布局组合。
这就扭转了局面:控制器没有绑定到特定的视图/布局

让我们以您提到的
addUser
功能为例来说明流程;我将参考这些文件(但您将有更多):

如您所见,布局位于每个视图的
tmpl
文件夹中

router.php

让我们从最后一个文件开始:
router.php
定义了我们的自定义SEF规则,所以在Jooml之后
{"email":"johndoe@example.com", "available":true}
$this->setRedirect(JRoute::_('index.php?option=com_yourcomponent&view=useradd', false));