实际上(在 2.5.14 上),当您单击 Category Manger 视图中的“新建”按钮时,第一个请求会生成一个 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为 a $typeofcategory和 a $taskof add。该$type值用于与组件基本路径(在本例中/pathto/site/administrator/components/com_categories)一起组装到控制器的路径。
因此,当实例化类在入口点文件中JController收到->execute($task)消息时:com_categories/categories.php
$controller->execute(JRequest::getVar('task'));
它实际上已经是一个类型的控制器,CategoriesControllerCategory这是您期望处理New按钮请求的类型。