2012-02-13 63 views
1

我试图根据Cake2中的url扩展路由到不同的操作。我有这个工作路线:CakePHP:基于扩展的不同路由

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行动仍称(包括分机,所以/../pages/json/run.ctp)。

感谢您的帮助!

回答

1

嗯它可能是因为你告诉蛋糕:filename可以包含一个点[a-zA-Z0-9_!\-\.]+那么路由器将总是匹配的第一个规则的第一条规则的第一条路线

对正则表达式..的

尝试改变路线的顺序,从特殊到一般

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

希望这有助于

+0

感谢您的回复。不幸的是,这并没有帮助。我改变了路线的顺序,并拿出了点。仍然Cake发送到'run'动作 – harpax 2012-02-14 09:05:33