哪个组件的控制器处理NEW项目的表单请求?

时间:2013-09-01 01:10:27

标签: joomla joomla2.5

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

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

然后,网址会重定向到/administrator/index.php?option=com_categories&view=item&layout=edit

我的问题是,为什么网址/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数据转换为目标网址并重定向到该数据?

感谢。

1 个答案:

答案 0 :(得分:2)

实际上(在2.5.14上),当你点击Category Manger视图中的“New”按钮时,第一个请求会生成一个POST:

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

POST请求通常会在HTTP邮件正文中发送查询字符串,而不仅仅是在URL中,在这种情况下,POST请求具有以下表单数据身体:

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 ),JController会将其考虑在内在getInstance($prefix, $config)入口点文件中调用com_categories时的类:

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

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

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

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

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