【问题标题】:CakePHP v3.x API prefixed routesCakePHP v3.x API 前缀路由
【发布时间】:2017-05-12 13:07:00
【问题描述】:

我有休闲路线:

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 - WORKS
网址:/api/job-chemicals/2.json - 不是

找不到或无法访问 Action JobChemicalsController::2()。为什么?!我正在使用 DashdRoute 没有下划线。有任何想法吗?我知道这是小事,但它让我发疯。

【问题讨论】:

    标签: cakephp routes cakephp-3.0


    【解决方案1】:

    $routes->fallbacks('DashedRoute');

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

    资源路由默认为下划线

    如问题中所述,带下划线的网址有效。

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

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

    您可以使用屈折选项指定替代屈折类型:

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

    上面将生成如下样式的 URL:/blog-posts/*。

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

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 2013-10-09
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多