实现单个模块控制器,同时使控制器脱离URL

时间:2012-10-11 22:48:17

标签: url magento controller

我想让一个模块控制器实现不同的操作方法,但我不希望这些URL出现像

www.example.com/module/index/action1  
www.example.com/module/index/action2  
www.example.com/module/index/action3

其中/index/将我们带到“IndexController”。拥有我想要的网址

www.example.com/module/action1  
www.example.com/module/action2  
www.example.com/module/action3

我需要为每个操作方法创建一个控制器类。在一个漂亮的类/文件/控制器中使用不同的操作方法获取我想要的URL的最佳方法是什么?我想知道除了URL重写之外是否还有其他方法。如果没有,你能指点我为Magento做一个很好的URL重写教程吗?

2 个答案:

答案 0 :(得分:0)

如果您不想在Web服务器上进行URL重写,那么您也可以在Magento的代码中进行URL重写。例如,您可以像这样覆盖Mage_Core_Controller_Varien_Router_Standard中的Match功能:

/* after getting the controller name and action name... */
if ((strcmp($module, 'myModuleName') == 0) && (strcmp($action, 'index') == 0)) {
    $action = $controller;
    $controller = 'index';
}
/* before checking if this place should be secure and instantiate controller class

我认为Web服务器上的URL重写将更清晰,更易于管理。

如果您使用的是Magento的URL重写,则可能需要为每个操作指定一个规则,例如:

Type: custom
Request Path: myModuleName/hello
Target Path: myModuleName/index/hello

您可以在目录>下的管理员中指定这些网址重写规则。 URL重写管理

答案 1 :(得分:0)

没有真正的理由违反Magento reuter/controller/action计划。对于他们创建的任何偏差,URL重写功能。

您甚至可以省略module部分来创建网址重写。创建URL重写非常简单,我认为您不需要教程,只需打开管理面板,转到目录 - > Url重写管理。点击创建新的重写,选择自定义类型,将所需的uri部分添加到请求路径module/action),并将实际的uri添加到目标路径module/controller/action)。