Php laravel如何匹配路由优先级

Php laravel如何匹配路由优先级,php,laravel,Php,Laravel,案例1: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'; }); Route::post('foo/{id}', function () { return

案例1:
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';
});
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 1
,这是正确的,因为url与第一条路由匹配

案例2:
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';
});
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

我的问题是为什么我得到了
路线3
的积分
路线2
。因为url首先匹配第二条路径,所以获取路径2是否合乎逻辑?!为什么在找到匹配后,Laravel继续匹配路由(在我的情况下是路由2)?

在情况1中,路由1具有优先级,因为它已生成路由(
foo/{id}


在案例2中,当您使用post方法时,路线1具有优先级,否则最后一条路线具有优先级,即路线3

第二个
foo/bar
路由覆盖第一个路由,因为HTTP方法和URI相同

HTTP方法+URI组合用作路由的主键。两者的结合必须是唯一的——同一条路线不能有两个不同的目的地

因此,Laravel采用了“后进先出”的方法,即覆盖之前的任何定义(如“路线2”)。您可以通过在命令行中运行
php artisan route:list
来确认这一点,以查看Laravel实际尝试匹配的路由定义