我正在尝试使用以下代码在Magento中进行一些自定义路由(我只是在这里稍微修改了https://stackoverflow.com/a/4158571/1069232):
class Company_Modulename_Controller_Router extends Mage_Core_Controller_Varien_Router_Standard {
public function match(Zend_Controller_Request_Http $request){
$path = explode('/', trim($request->getPathInfo(), '/'));
// If path doesn't match your module requirements
if ($path[1] == 'home.html' || (count($path) > 2 && $path[0] != 'portfolios')) {
return false;
}
// Define initial values for controller initialization
$module = $path[0];
$realModule = 'Company_Modulename';
$controller = 'index';
$action = 'index';
$controllerClassName = $this->_validateControllerClassName(
$realModule,
$controller
);
// If controller was not found
if (!$controllerClassName) {
return false;
}
// Instantiate controller class
$controllerInstance = Mage::getControllerInstance(
$controllerClassName,
$request,
$this->getFront()->getResponse()
);
// If action is not found
if (!$controllerInstance->hasAction($action)) {
return false;
}
// Set request data
$request->setModuleName($module);
$request->setControllerName($controller);
$request->setActionName($action);
$request->setControllerModule($realModule);
// Set your custom request parameter
$request->setParam('url_path', $path[1]);
// dispatch action
$request->setDispatched(true);
$controllerInstance->dispatch($action);
// Indicate that our route was dispatched
return true;
}
}
结果是模板已加载但没有内容的页面。如果我在控制器中注释掉$ this-> loadLayout()/ $ this-> renderLayout(),我可以打印到屏幕。但是,当我尝试加载模板和/或块时,它会在某个地方中断。
home.html也加载正常(如果路径是home.html,则方法返回false)。
非常感谢任何协助。
答案 0 :(得分:2)
我正在实现与此类似的东西并遇到同样的问题(这是有道理的,因为我复制了你的代码)
在$request->setDispatched(true);
之前
我添加了$request->setRouteName('brands');
(品牌是我模块的前缀)。
并且它工作了。不知道它是否适合你,但是肯定有一些东西缺失,所以magento不知道应用什么布局,因为我可以告诉我们已经达到了控制器。