您应该尝试以下操作:
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”值中传递 :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'));
因此,当您的自定义路由无法传递 url 时,它会尝试使用默认 url,不带 ext 参数。否则,参数的顺序就不正常了。
也许不是最好的或更清洁的解决方案,但这是一个好的开始。