CakePHP v3.x API前缀路由

时间:2016-12-28 09:14:04

标签: cakephp routes cakephp-3.0

我有以下路线:

Router::scope('/', function (RouteBuilder $routes) {
  Router::prefix('api', function ($routes) {
    $routes->extensions(['json', 'xml']);
    $routes->resources('JobChemicals');
    $routes->fallbacks('DashedRoute'); 
});

网址:/api/job_chemicals/2.json - 工作
网址:/api/job-chemicals/2.json - 不是

无法找到或无法访问操作JobChemicalsController :: 2()。为什么?!我正在使用没有强调的DashdRoute。有任何想法吗?我知道它很小,但它让我发疯。

1 个答案:

答案 0 :(得分:1)

  

$routes->fallbacks('DashedRoute');

这只会影响后备路由,而不会影响对$routes->resources的调用。

资源路由默认为下划线

如问题所述,强调网址有效。

同样noted in the docs,资源路由默认为下划线:

  

默认情况下,多措辞控制器的URL片段是控制器名称的下划线形式。例如,BlogPostsController的URL片段是/ blog_posts。

     

您可以使用inflect选项指定替代变形类型:

Router::scope('/', function ($routes) {
    $routes->resources('BlogPosts', [
        'inflect' => 'dasherize' // Will use ``Inflector::dasherize()``
    ];
});
     

以上将生成样式为:/ blog-posts /*.

的网址

这种差异的原因是遗留(在3.0下划线中是所有内容的默认URL变形),但修复很简单 - 只需在资源调用中包含inflect选项。

相关问题