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
Вариант для вызова ресурсов.