-2

我能够理解如何使用 collectRoutes() 函数收集路由器。然后,magento 如何尝试使用 dispatch() 方法中的 match() 函数为请求的 URL 匹配路由器。但是磁路由如何初始化具体的Action Controller和Action方法呢?controller_front_send_response_before 和 controller_front_send_response_after 事件的用途是什么?

4

1 回答 1

1

哦,这很容易(如果我正确理解你的问题)。

URL 总是有一个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令牌设置为myactionMagento 将尝试调用myactionAction()方法。

事实上,controlleraction标记都可以省略。在这种情况下,Magento 将尝试实例化Mygroup_Myextension_IndexController并调用indexAction()您的扩展的方法。

于 2012-12-02T13:39:49.263 回答