doo*_*ers 3 php forms joomla form-submit
在表单操作设置为类似的情况下:
action="<?php echo JRoute::_('index.php?option=com_test&layout=edit&id='.(int) $this->item->id); ?>"
Run Code Online (Sandbox Code Playgroud)
并且表单包含和隐藏输入:
<input type="hidden" name="task" value="testctrl.save" />
Run Code Online (Sandbox Code Playgroud)
joomla如何路由到控制器方法?
我会理解它是否在表单操作中有任务,但我无法看到它如何从隐藏的输入中获取任务以便路由到testctrl控制器方法中的相应方法
小智 6
这并不复杂.在您的com_mycom目录中有一个名为的文件mycom.php.在其中你有一些看起来像这样的行:
$controller = JControllerLegacy::getInstance('Contact');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();
Run Code Online (Sandbox Code Playgroud)
请参阅此处的示例:https: //github.com/joomla/joomla-cms/blob/staging/components/com_contact/contact.php#L15
这就是接受任务并实例化该控制器对象的实例的功能,并从您指出的隐藏表单输入值中提取任务.它从那里将任务传递给控制器.
控制器在此处接收请求:
https://github.com/joomla/joomla-cms/blob/staging/components/com_contact/controller.php#L19
您可能会问"为什么我看不到它接收组件文件发送它的任务?".那是因为这个组件的控制器是JControllerLegacy类的子类:
https://github.com/joomla/joomla-cms/blob/staging/libraries/legacy/controller/legacy.php#L701
public function execute($task)
{ ... }
Run Code Online (Sandbox Code Playgroud)
该函数是执行函数,它从组件接收任务.这是控制器任务的父类.希望这一切都有意义!
| 归档时间: |
|
| 查看次数: |
4731 次 |
| 最近记录: |