簡體   English   中英

Laravel如何處理相同的獲取路線

[英]How laravel handles same get routes

我正在為自己的框架開發自定義路由系統。 我的問題是laravel如何在其路由系統中處理相同的路由。 例如

Route::get('api/users/{user}', function (App\User $user) {
    return $user->email;
});

Route::get('api/user/{pass}', function (App\User $user) {
    return $user->email;
});

路由api/user/{pass}api/users/{user}數目相同。 他們是如何做到的? 他們如何區分路線? 匹配過程如何工作?

Laravel會安全地查找路由,這意味着給定兩條具有相同端點的路由,它將始終調用找到的第一個路由並在此處停止,因此永遠不會到達第二條路由,例如:

// Your url is user/johndoe

// It will start looking for a match

Route::get('user/{name}', function ($name) { // This route is a match 
    // This callback is called and Laravel stops searching
    return $name;
});

Route::get('user/{id}', function ($id) { // This route is also a match
    // But a callback is already been called so this one is never reached
    return $id;
});

如果您想區分這兩種路由,可以使用正則表達式進行區分:

Route::get('user/{name}', function ($name) {
    // This callback will only be executed when a word is passed in
})->where('name', '[A-Za-z]+');

Route::get('user/{id}', function ($id) {
    // This callback will only be executed when a number is passed in
})->where('id', '[0-9]+');

如您所見,這兩個路由都具有相同的端點,但是現在它們將根據您提供的正則表達式過濾給定的參數。 希望這對您有所幫助。

Laravel將僅采用兩者中的第一條路線,因為它們基本相同。 它無法區分這兩種路線。 如果路由方法之一不同(即放置或發布而不是獲取),則兩種路由都將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM