0

我想这样做的原因是因为我想要两个不同的 url 来使用同一个控制器。即/mymodule/mycontroller/mymodule/mycontroller2应该使用相同的控制器Mypackage_Mymodule_Mycontroller

是否可以在 config.xml 中执行此操作?还是我必须操纵路由器?

我更喜欢设置配置文件而不是操纵路由器。在 ZendFramework 应用程序中,这可以在 routes.ini 中完成,如下所示

routes.myroute.route = "/mymodule/mycontroller2"
routes.myroute.defaults.module = "mymodule"
routes.myroute.defaults.controller = "mycontroller"

Magento中是否有类似的方法?

出于 SEO 原因,我不想使用重写。

提前谢谢了

4

2 回答 2

2

你可以这样做(编辑)三种方式:

  1. mycontroller2根据需要扩展mycontroller和覆盖/扩展操作方法 - 但这似乎不是您想要的。

  2. 使用有点过时的基于配置的 URL 重写,它允许您将一个控制器指向另一个控制器(参考Mage_Core_Controller_Varien_Action::_rewrite()

    <global>
        <routers>
            <mymodule><!-- match your routers config node -->
                <rewrite>
                    <mycontroller2><!-- match your controller name -->
                        <override_actions>true</override_actions>
                        <to>mymodule/mycontroller</to>
                    </mycontroller2>
                </rewrite>
            </mymodule>
        </routers> 
    </global>
    

    此外,您将需要创建一个虚拟控制器操作来处理所有重写(这是这种已弃用的重写样式的大问题)。鉴于您的要求,以下应该有效:

    <?php
    
    class My_Module_MyController extends Mage_Core_Controller_Front_Action
    {
        public function __call($doesnt,$matter)
        {
            //empty...
        }
    }
    
  3. 而且我刚刚确定您可以完全跳过配置:

    class My_Module_Mycontroller2Controller extends Mage_Core_Controller_Front_Action
    {
        public function __call($action,$matter)
        {
            $method = preg_split('/Action/',$action);
            $this->_forward(
                $method[0],
                'mycontroller',
                'mymodule'
            );
        }
    }
    
于 2013-06-23T23:44:13.160 回答
0

我猜你不想使用 htaccess 重写。所以只是为了确保以防万一你不知道:Magento 内置了一个很好的重写系统。很抱歉只发布了一个 supid 链接,但是通过查看它,你可以轻松解决这个任务......

http://www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/how_to_work_with_magento_url_rewrite_rules

于 2013-06-22T21:23:19.550 回答