[英]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.