2010-09-12 32 views
1

在我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版本不起作用。前端没有任何错误信息,链接看起来没问题,但是点击一个链接后,我只是重定向到了开始页面。

缺什么?

回答

0

您不能在密钥中使用{}|&~![()^"字符,并且如果使用这些字符,则必须对值的字符串进行双引号引用。

所以双引号:

pageDetails.reqs.title = ""(.*)?"" 

有关这方面看:http://php.net/manual/en/function.parse-ini-file.php

+0

Hm,s orry,似乎没有工作,如果我改变ini文件中的行,使其看起来像你所建议的,我得到一个Zend_Config_Exception与消息“语法错误,意外'(”。感谢您的提示。 – Max 2010-09-12 20:48:07

1

尝试添加前缀 '路线' 给他们,如文档:

[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'); 
+0

好主意,但不幸的是,这并没有改变任何东西。很奇怪...... – Max 2010-09-13 05:31:50

+0

你有没有尝试在添加它们之前var_dump-$路由的内容? – Ashley 2010-09-13 17:07:55

相关问题