CakePHP v3.x API с префиксными маршрутами

У меня есть следующие маршруты:

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

URL: /api/job_chemicals/2.json - РАБОТАЕТ
URL: /api/job-chemicals/2.json - НЕ

Действие JobChemicalsController::2() не найдено или недоступно. Зачем?! Я использую DashdRoute не подчеркнуто. Есть идеи? Я знаю, что это мало, думает, но это сводит меня с ума.

1 ответ

$routes->fallbacks('DashedRoute');

Это влияет только на запасные маршруты, а не вызов $routes->resources,

Маршруты ресурса по умолчанию подчеркивания

Как отмечается в вопросе, подчеркнутые URL работают.

Как также отмечено в документации, маршруты ресурсов по умолчанию подчеркиваются:

По умолчанию фрагменты URL в нескольких адресах контроллеров являются подчеркнутой формой имени контроллера. Например, фрагмент URL-адреса BlogPostsController будет / blog_posts.

Вы можете указать альтернативный тип перегиба, используя опцию inflect:

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

Выше будет генерировать URL-адреса в стиле: /blog-posts/*.

Причиной такого несоответствия является наследство (в 3.0 подчеркивания были отражением URL по умолчанию для всего), но исправить это просто - просто включите inflect Вариант для вызова ресурсов.

Другие вопросы по тегам