为什么我的路由在.ini文件中定义不起作用?
问题描述:
在我Bootstrap.php
我有下面的代码定义一个路线:为什么我的路由在.ini文件中定义不起作用?
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addRoute('pageDetails', new Zend_Controller_Router_Route('page-details/:uid/:title', array(
'module' => 'default',
'controller' => 'list',
'action' => 'detail',
), array(
'uid' => '\d+',
'title' => '(.*)?',
)));
这工作。
然后我尝试将路由设置更改为使用定义路由的.ini
文件。该.ini
文件看起来像这样:
[routes]
pageDetails.route = "page-details/:uid/:title"
pageDetails.default.module = "default"
pageDetails.default.controller = "list"
pageDetails.default.action = "detail"
pageDetails.reqs.uid = "\d+"
pageDetails.reqs.title = "(.*)?"
我在Bootstrap.php
通过添加路由:
$config = Zend_Registry::get('config');
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addConfig(new Zend_Config_Ini($config['routes']['configPathname'], 'routes'));
虽然.ini
版本和路径在PHP代码中定义应该做的完全一样,.ini
版本不起作用。前端没有任何错误信息,链接看起来没问题,但是点击一个链接后,我只是重定向到了开始页面。
缺什么?
答
您不能在密钥中使用{}|&~![()^"
字符,并且如果使用这些字符,则必须对值的字符串进行双引号引用。
所以双引号:
pageDetails.reqs.title = ""(.*)?""
答
尝试添加前缀 '路线' 给他们,如文档:
[routes]
routes.archive.route = "archive/:year/*"
routes.archive.defaults.controller = archive
routes.archive.defaults.action = show
routes.archive.defaults.year = 2000
routes.archive.reqs.year = "\d+"
然后试着这个:
$config = Zend_Registry::get('config');
$routes = new Zend_Config_Ini($config['routes']['configPathname'], 'routes')
Zend_Controller_Front::getInstance()->getRouter()->addConfig($routes, 'routes');
Hm,s orry,似乎没有工作,如果我改变ini文件中的行,使其看起来像你所建议的,我得到一个Zend_Config_Exception与消息“语法错误,意外'(”。感谢您的提示。 – Max 2010-09-12 20:48:07