如何为特定控制器操作设置url - Magento

时间:2012-09-05 09:31:26

标签: magento

如果我有模块mymodule,我有索引控制器。其中我有子行为'subaction'

通常我以

的身份访问页面
   http://www.mywebsite/index.php/mymodule/index/subaction

如何从代码中设置网址,例如

   http://www.mywebsite/index.php/subaction
   or
   http://www.mywebsite/index.php/mymodule/subaction

注意::我不想在同一个索引控制器中创建我想要的新控制器。

2 个答案:

答案 0 :(得分:0)

Magento URL到控制器的匹配通过标准路由器工作,该路由器期望URL具有特定的表单。如果您想更改它,您可以选择一些选项:

  1. 不推荐使用基于配置的网址重写
  2. 在core_url_rewrite表中创建URL重写条目
  3. 创建自定义路由器类以匹配您要使用的网址格式
  4. 在考虑URL匹配应如何工作时,您需要考虑Magento如何使用其原生URL计算工具以及如何获取匹配请求来构建URL。

答案 1 :(得分:-3)

您可以使用路线

来完成此操作

在你的引导程序中执行以下操作

protected function _initMyRoutes() {
    $this->bootstrap('frontController');
    $front  = $this->getResource('frontController');
    $router = $front->getRouter();

    $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', APPLICATION_ENV);
    $router->addDefaultRoutes();
    $router->addConfig($config, 'routes');

    return $router;

}

并在configs目录中创建一个名为routes.ini的文件,并在其中放置以下内容

routes.myRoute.type = "Zend_Controller_Router_Route_Static"
routes.myRoute.route = "/subaction/" 
routes.myRoute.defaults.module = "mymodule"
routes.myRoute.defaults.controller = "index"
routes.myRoute.defaults.action = "subaction"

OR

您可以使用

直接在引导程序中添加路径
protected function _initMyRoutes() {
    $this->bootstrap('frontController');
    $front  = $this->getResource('frontController');
    $router = $front->getRouter();
    $router->addDefaultRoutes();

    $route = new Zend_Controller_Router_Route_Static(
        'subaction',
        array('module' => 'mymodule', 'controller' => 'index', 'action' => 'subaction')
    );
    $router->addRoute('subaction', $route);

    return $router;

}

应该这样做但是使用路线建议真的很痛苦。

More about routes in the ZF manual