我能够理解如何使用collectRoutes()函数收集路由器。那么magento如何尝试使用dispatch()方法中的match()函数匹配路由器以获取所请求的URL。 但是磁路由器如何初始化特定的Action Controller和Action方法? controller_front_send_response_before和controller_front_send_response_after事件的效用是什么?
答案 0 :(得分:1)
哦,这很容易(如果我理解你的问题)。
网址始终具有route/controller/action
结构。
因此,一旦Magento解决了route
(你说你得到了它的工作方式),它只使用controller
标记作为控制器类名的第一部分。因此,例如,如果您的控制器令牌为mymodule
且您的扩展名前缀为Mygroup_Myextension
,则会尝试实例化Mygroup_Myextension_MymoduleController
。这意味着您的文件必须位于app/code/[community-or-local]/Mygroup/Myextension/controllers/MymoduleController.php
。
然后Magento将使用action
令牌来调用您班级内的方法。因此,如果action
令牌设置为myaction
,Magento将尝试调用myactionAction()
方法。
事实上,controller
和action
令牌都可以省略。在这种情况下,Magento将尝试实例化Mygroup_Myextension_IndexController
并调用您的扩展程序的indexAction()
方法。