laravel如何匹配路由优先级

时间:2018-06-20 19:46:13

标签: php laravel

情况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)?

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。