你應該嘗試以下操作:
Router::connect('/:ext/', array(':ext'), array('pass' => 'ext'));
Router::connect('/:ext/:controller/*', array(':ext'), array('pass' => 'ext'));
Router::connect('/:ext/:controller/:action/*', array(':ext'), array('pass' => 'ext'));
然後,路由器會通過:EXT的說法,在路由參數的「外部」的價值。將它添加爲您的所有規則!
如果您想使用傳統路線工作,您需要使用自定義CakeRoute。在您的應用程序文件夾中創建一個文件 「/libs/routes/RestRoute.php」,添加以下到它:
class RestRoutes extends CakeRoute {
function parse($url) {
$params = parent::parse($url);
if (empty($params)) {
return false;
}
if(!in_array($params['ext'], Router::extensions())) {
return false;
}
return $params;
}
}
而在你/core/routes.php:
App::import('Lib', 'routes/RestRoute');
Router::connect('/:ext/', array(':ext'), array('pass' => 'ext', 'routeClass' => 'RestRoute'));
Router::connect('/:ext/:controller/*', array(':ext'), array('pass' => 'ext', 'routeClass' => 'RestRoute'));
Router::connect('/:ext/:controller/:action/*', array(':ext'), array('pass' => 'ext', 'routeClass' => 'RestRoute'));
所以,當您的自定義路由無法傳遞網址時,它會嘗試使用默認網址,而不使用外部參數。否則,參數的順序並不安靜。
也許不是最好的或更乾淨的解決方案,但這是一個好的開始。
一些替代方法是使用重寫規則,或將'/ show:10/page:2.json'更改爲'/action.json?show = 10&page = 2' – tigrang 2012-07-10 18:24:00
後者不是特別令人滿意,醜陋,並沒有真正解決使用類似前綴的路線的問題。 我想過前者,但不確定如何解決這個問題,因爲我無法通過重寫規則將參數傳遞給CakePHP? – GTF 2012-07-11 00:20:20