情况1:ReporteRs::FlexTable
:
web.php
当我浏览到Route::get('foo/{id}', function () {
return 'Route 1';
});
Route::get('foo/bar', function () {
return 'Route 2';
});
Route::get('foo/bar', function () {
return 'Route 3';
});
时,得到的localhost/foo/bar
正确,因为网址与第一条路线匹配。
情况2:Route 1
:
web.php
当我浏览到Route::post('foo/{id}', function () {
return 'Route 1';
});
Route::get('foo/bar', function () {
return 'Route 2';
});
Route::get('foo/bar', function () {
return 'Route 3';
});
时,我得到了localhost/foo/bar
。
我的问题是为什么我得到Route 3
的{{1}}知识。因为url首先匹配第二条路由,所以获取Route 3
是不合逻辑的吗?为什么找到匹配后Laravel继续匹配路由(在我的情况下为路由2)?
答案 0 :(得分:1)
第二条foo/bar
路由将覆盖第一条路由,因为HTTP方法和URI相同。
HTTP方法+ URI组合用作路由的主键。两者的组合必须是唯一的-同一条路线不能有两个不同的目的地。
因此,Laravel采用了“后进先出”方法,其中任何先前的定义(例如“ Route 2”)都将被覆盖。您可以通过在命令行中运行php artisan route:list
来确认这一点,以查看Laravel实际尝试匹配的路由定义。
答案 1 :(得分:0)
在情况1 中,路由1具有优先级,因为它已经生成了路由(foo/{id}
)
在情况2 中,路线1的优先级当您使用发布方法时,否则最后一条路线的优先级为3。