您错过了这样一个事实,即这既不受支持,也没有实际使用前缀路由。您要么必须连接每个前缀的路由,例如
Router::connect('/api/2.0/:controller/:action/*',
array(
'prefix' => 'api_2_0',
'api_2_0' => true
)
);
Router::connect('/api/2.1/:controller/:action/*',
array(
'prefix' => 'api_2_1',
'api_2_1' => true
)
);
另请参阅Cookbook > Development > Routing > Prefix Routing
或使用自定义路由类,从多个路由元素构建动作名称,类似于
app/Routing/Route/VersionedApiRoute.php
App::uses('CakeRoute', 'Routing/Route');
class VersionedApiRoute extends CakeRoute
{
public function parse($url)
{
$route = parent::parse($url);
if (!$route) {
return false;
}
$route['action'] =
'api_' . str_replace('.', '_', $route['version']) . '_' . $route['action'];
return $route;
}
}
app/Config/routes.php
App::uses('VersionedApiRoute', 'Routing/Route');
Router::connect('/api/:version/:controller/:action/*',
array(),
array(
'routeClass' => 'VersionedApiRoute',
'version' => '2\.0|2\.1' // this is a regex, so don't forget to escape the dots
)
);
另请参阅Cookbook > Development > Routing > Custom Route Classes