我有以下路线:
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。有任何想法吗?我知道它很小,但它让我发疯。
答案 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
选项。