【问题标题】:Which component's controller handle the form request of NEW item?哪个组件的控制器处理新项目的表单请求?
【发布时间】:2013-09-04 10:41:52
【问题描述】:

查看了这个post后,我知道Joomla使用task=X.Y调用控制器来处理请求。

但如果我点击 com_categories 组件上的 NEW 按钮,它将访问/administrator/index.php?option=com_categories&view=items 的 URL 并包含以下 POST 数据:

然后 URL 被重定向到/administrator/index.php?option=com_categories&view=item&layout=edit

我的问题是为什么 URL /administrator/index.php?option=com_categories&view=items 没有 task=X.Y 并且它可以重定向到 /administrator/index.php?option=com_categories&view=item&layout=edit

我知道它包含带有task=item.add 的 POST 数据,但是哪个控制器将此 POST 数据转换为目标 URL 并重定向到该 URL?

谢谢。

【问题讨论】:

    标签: joomla joomla2.5


    【解决方案1】:

    实际上(在 2.5.14 上),当您在 Category Manger 视图中单击“新建”按钮时,第一个请求会生成一个 POST:

    POST /administrator/index.php?option=com_categories&view=categories HTTP/1.1
    

    POST 请求通常在HTTP 消息正文中发送查询字符串,而不仅仅是在 URL 中,在这种情况下,POST 请求在正文中具有以下 form 数据:

    filter_search   
    filter_level    
    filter_published    
    filter_access   
    filter_language 
    limit   5
    limitstart  0
    order[] 1
    order[] 1
    order[] 1
    order[] 1
    order[] 2
    batch[assetgroup_id]    
    batch[language_id]  
    batch[category_id]  
    batch[move_copy]    m
    extension   com_content
    task    category.add
    boxchecked  0
    filter_order    a.lft
    filter_order_Dir    asc
    original_order_values   1,1,1,1,2
    796194955f38a0d8db484c92d92ca5ce    1
    

    您会注意到这有一个 task 参数,其值为 category.add不是 item.add),当 getInstance($prefix, $config) 为在com_categories入口点文件中调用:

    $controller = JControllerLegacy::getInstance('Categories');
    

    JController 类将category.add 转换为category$typeadd$task$type 值用于结合组件基本路径(在本例中为 /pathto/site/administrator/components/com_categories)组装到控制器的路径。

    所以,当实例化的JController 类在com_categories/categories.php 入口点文件中收到->execute($task) 消息时:

    $controller->execute(JRequest::getVar('task'));

    它实际上已经是一个 CategoriesControllerCategory 类型的控制器,这是您期望处理 New 按钮请求的控制器。

    【讨论】:

    • 感谢您提供详细信息,请参阅您的说明“xxxthis 是 JController 类在 getInstance($prefix, $config)xxx 时考虑的”,因此 JController 类将 POST 数据转换为 $type和 $task 变量?
    • 是的,如果您查看/libraries/joomla/application/component/controller.phpgetInstance()JController 版本,您可以看到转换步骤。
    • 谢谢,还有一件事:我发现 getWord() 的定义为“获取并返回给定的过滤变量”,getVar() 的定义为“获取并返回给定的变量”。过滤变量和给定变量是什么意思?你能提供一些例子吗?再次感谢。
    • 你最好在另一个问题中问这个问题,答案可能对其他人有所帮助。
    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2020-06-12
    相关资源
    最近更新 更多