我正在尝试根据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)。
感谢您的帮助!
答案 0 :(得分:1)
嗯,这可能是因为第一条路线的正则表达式
关于第一条规则,你告诉蛋糕:filename
可以包含一个点[a-zA-Z0-9_!\-\.]+
所以路由器总是匹配第一条规则..
尝试更改路线的顺序,从特定到一般
还要检查蛋糕如何管理file extensions on routes
希望这有帮助