为什么在.ini文件中定义的路由不起作用?

时间:2010-09-12 20:06:04

标签: php zend-framework routing

在我的Bootstrap.php中,我有以下代码来定义路线:

    $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版本不起作用。前端没有错误消息,链接看起来没问题但是点击了这条路线的链接后我才被重定向到起始页面。

缺少什么?

2 个答案:

答案 0 :(得分:1)

尝试在文档中添加前缀'routes':

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

答案 1 :(得分:0)

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

所以双引号:

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

有关详情,请参阅:http://php.net/manual/en/function.parse-ini-file.php