1

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

通常我访问页面为

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

如何从代码中设置 url,例如

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

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

4

2 回答 2

0

Magento URL 到控制器的匹配通过标准路由器工作,该路由器期望 URL 具有特定的形式。如果您想改变这一点,您有几个选择:

  1. 已弃用的基于配置的 URL 重写
  2. 在 core_url_rewrite 表中创建 URL 重写条目
  3. 创建一个自定义路由器类以匹配您要使用的 URL 模式

在考虑 URL 匹配应该如何工作时,您需要考虑 Magento 将如何使用其原生 URL 计算工具构建 URL,以及如何获取匹配的请求。

于 2012-09-05T11:48:37.723 回答
-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"

或者

您可以直接在引导程序中添加路线

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;

}

这应该可以解决问题,但建议使用路线真的很痛苦。

ZF 手册中有关路线的更多信息

于 2012-09-05T10:41:46.893 回答