CakePHP:基于扩展的不同路由

时间:2012-02-13 09:54:40

标签: cakephp routing cakephp-2.0

我正在尝试根据Cake2中的url-extension路由到不同的操作。我有这条工作路线:

Router::connect(
    '/:lang/:product/:version/:filename', 
    array(
        'controller'    => 'pages', 
        'action'        => 'run', 
        'lang'          => ':lang', 
        'product'       => ':product', 
        'version'       => ':version',
        'filename'      => ':filename'
    ),
    array(
        'pass'          => array('filename'),
        'lang'          => '[a-zA-Z]{2}',
        'product'       => '[a-zA-Z0-9_!\-]+',
        'version'       => '[0-9]{3}',
        'filename'      => '[a-zA-Z0-9_!\-\.]+'
    )
);

对于新路线,我只需添加扩展名并更改操作。

Router::connect(
    '/:lang/:product/:version/:filename.json', 
    array(
        'controller'    => 'pages', 
        'action'        => 'get', 
        'lang'          => ':lang', 
        'product'       => ':product', 
        'version'       => ':version',
        'filename'      => ':filename'
    ),
    array(
        'pass'          => array('filename'),
        'lang'          => '[a-zA-Z]{2}',
        'product'       => '[a-zA-Z0-9_!\-]+',
        'version'       => '[0-9]{3}',
        'filename'      => '[a-zA-Z0-9_!\-\.]+'
    )
);

出于某种原因,虽然仍然调用run动作(包括ext,所以/../pages/json/run.ctp)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

嗯,这可能是因为第一条路线的正则表达式

关于第一条规则,你告诉蛋糕:filename可以包含一个点[a-zA-Z0-9_!\-\.]+所以路由器总是匹配第一条规则..

尝试更改路线的顺序,从特定到一般

还要检查蛋糕如何管理file extensions on routes

希望这有帮助