我在当前的Zend Framework应用程序中遇到了问题.
在我的Bootstrap中,我注册了以下路线:
protected function _initRouter() { $this->bootstrap("FrontController"); $frontController = $this->getResource("FrontController"); $route = new Zend_Controller_Router_Route( ":module/:id", array( "controller" => "index", "action" => "index" ), array("id" => "\d+") ); $frontController->getRouter()->addRoute('shortcutOne', $route); $route = new Zend_Controller_Router_Route( ":module/:controller/:id", array("action" => "index"), array("id" => "\d+") ); $frontController->getRouter()->addRoute('shortcutTwo', $route); $route = new Zend_Controller_Router_Route( ":module/:controller/:action/:id", null, array("id" => "\d+", "action" => "\w+") ); $frontController->getRouter()->addRoute('shortcutThree', $route); }
后来我将Zend_Navigation添加到我的项目中.我有几个模块,在模块引导程序中注册导航元素:
getApplication()->getResource("layout"); $view = $layout->getView(); $config = new Zend_Config_Xml(dirname(__FILE__)."/config/navigation.xml", "nav"); $view->navigation()->addPage($config); } }
当我在浏览器中打开应用程序时,一切正常.这意味着我可以看到导航并单击其链接以查看指定的页面.但当我点击使用:module /:action /:id路由的页面时,Navigation Helper会抛出Zend_Controller_Router_Route异常:
致命错误:Zend_Controller_Router_Exception:在第519行的C:\ Entwicklung\kt\trunk\src\library\Zend\View\Helper\Navigation\HelperAbstract.php中未指定id
你们中的任何人都遇到过这个错误吗?如果你可以帮助我或给我建议,那将是很棒的.如果您需要有关我的设置等的更多信息,请告诉我.
谢谢!
我自己找到了解决方案.
此问题是由于Zend_Navigation元素的不太有益的行为引起的.在他们的getHref()方法中,他们使用URL帮助器.此助手创建导航条目必须链接到的URL,接受为导航元素指定的参数(模块,控制器,操作等)
现在,问题在于,如果您像我一样在引导程序中创建了自定义路由,例如
":module/:controller/:id"
您遇到的问题是,当使用此路由时,URL帮助程序使用该路由生成导航条目的链接.但是,我没有传递额外的"id"参数,所以我得到了例外.
因此,一种解决方案是为每个Zend_Navigation_Page_Mvc实例"route"传递一个附加参数,该实例设置为"default".
我还没有尝试的另一个解决方案是让新的自定义路由重新映射到默认路由,例如:
":module/:controller/:action/id/$id"
但我不知道你是否有能力使用Zend Framework来做到这一点.