Magento url routing:如何定位给定URL的控制器/视图

dav*_*ave 2 model-view-controller routing templates magento

我是magento的新手,我正在尝试根据此网址查找文件/代码:

somedomainfortesting.com/index.php/catalogsearch/result/?q=test
Run Code Online (Sandbox Code Playgroud)

为了安全起见,我只是在上面放了一个测试域名,但总的来说我只是想找到上面的url文件(views/controller).我是magento的新手.

Ala*_*orm 5

它很复杂,但一般来说,Magento URL有三个部分(Zend Framework 1样式)

http://somedomainfortesting.com/index.php/front-name/controller-name/action-name
Run Code Online (Sandbox Code Playgroud)

"正面名称"通常标识您可以在其中找到控制器的模块文件夹.

例如,catalogsearch可以在中找到带有作为前缀名称的URL的控制器

#File: app/code/core/Mage/CatalogSearch/controllers/
Run Code Online (Sandbox Code Playgroud)

你知道这个,因为在Mage_CatalogSearch配置文件中,有一个配置的frontname(<frontName>catalogsearch</frontName>)

#File: app/code/core/Mage/CatalogSearch/etc/config.xml
    <routers>
        <catalogsearch>
            <use>standard</use>
            <args>
                <module>Mage_CatalogSearch</module>
                <frontName>catalogsearch</frontName>
            </args>
        </catalogsearch>
    </routers>    
Run Code Online (Sandbox Code Playgroud)

URL的下一部分定义了控制器名称.控制器名称确定controllers文件夹中的特定控制器文件.同样,在您的示例中,控制器名称是result,因此您可以在以下文件中找到控制器(ResultController.php)

app/code/core/Mage/CatalogSearch/controllers/ResultController.php 
Run Code Online (Sandbox Code Playgroud)

最后,操作名称确定Magento控制器中的哪个方法将调用.在您的示例中,没有操作名称,因此Magento默认使用名称index,这意味着它indexAction被称为

#File: app/code/core/Mage/CatalogSearch/controllers/ResultController.php
public function indexAction()
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

您将注意到上面我使用了通常标识的术语- 这是因为有很多其他情况,其中多个模块可以声明一个前线名称,或者用户可以重写URL以转到别处.如果你有兴趣学习更多并深入挖掘 - 我原来的Magento for PHP MVC Developers博客系列仍然是一个很好的起点(内容已过时,但仍然准确).如果你之后没有受伤和殴打,你可以阅读In Depth Magento Dispatch,其中介绍了Magento如何处理URL路由,从上到下.

最后,还有一点自助,你可以检查Commerce Bug - 它是我的商业Magento调试扩展,并包含有关加载页面的特定控制器的信息.

在此输入图像描述

您可以使用免费演示轻松查看Magento默认值,如果您认为它值得/有用,可以为您自己的系统购买副本.

希望有所帮助!