<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 路由組 ## 路由組 <https://www.cnblogs.com/wesky/p/10443206.html> - 路由組允許你在大量路由之間共享路由屬性,例如中間件或命名空間,而不需要為每個路由單獨定義這些屬性。 - 共享屬性應該以數組的形式傳入 `Route::group` 方法的第一個參數中。 ### 中間件 要給路由組中所有的路由分配中間件,可以在 group 之前調用`middleware`方法,中間件會依照它們在數組中列出的順序來運行: ``` <pre class="calibre11">``` Route::middleware(['first',?'second'])->group(function?()?{? ???Route::get('/',?function?()?{? ???????//?//?使用?first?和?second?中間件?? ???????}); ????Route::get('user/profile',?function?()?{?? ???????//?//?使用?first?和?second?中間件 ????????}); ????}); ``` ``` ### 命名空間 另一個常見用例是使用`namespace`方法將相同的 PHP 命名空間分配給路由組的中所有的控制器: ``` <pre class="calibre11">``` Route::namespace('Admin')->group(function?()?{?? ??//?在?"App\Http\Controllers\Admin"?命名空間下的控制器 ?}); ``` ``` ### 子域名路由 - 子域名可以像路由 URI 一樣被分配路由參數,允許你獲取一部分子域名作為參數給路由或控制器使用。 - 可以在 group 之前調用`domain`方法來指定子域名: ``` <pre class="calibre11">``` Route::domain('{account}.myapp.com')->group(function?()?{? ???Route::get('user/{id}',?function?($account,?$id)?{? ??????????//??? ????}); ?}); ``` ``` ### 路由前綴 可以用`prefix`方法為路由組中給定的 URL 增加前綴。例如,你可以為組中所有路由的 URI 加上 admin 前綴: ``` <pre class="calibre11">``` Route::prefix('admin')->group(function?()?{? ???Route::get('users',?function?()?{??? ????????//?匹配包含?"/admin/users"?的?URL?? ???????}); ???}); ``` ``` ### 路由名稱前綴 name 方法可以用來給路由組中的每個路由名稱添加一個給定的字符串。 例如,您可能希望以 「admin」為所有分組路由的名稱加前綴。 給定的字符串與指定的路由名稱前綴完全相同,因此我們將確保在前綴中提供尾部的`.`字符: ``` <pre class="calibre11">``` Route::name('admin.')->group(function?()?{? ???Route::get('users',?function?()?{??? ????????//?指定路由名為?"admin.users"...?? ???})->name('users');}); ``` ``` ## 路由模型綁定 - 當向路由或控制器行為注入模型 ID 時,就需要查詢這個 ID 對應的模型。 - 例如,你可以注入與給定 ID 匹配的整個`User`模型實例,而不是注入用戶的 ID。 ### 隱式綁定 Laravel 會自動解析定義在路由或控制器行為中與類型提示的變量名匹配的路由段名稱的 Eloquent 模型。例如: ``` <pre class="calibre11">``` Route::get('api/users/{user}',?function?(App\User?$user)?{? ???return?$user->email; }); ``` ``` 在這個例子中,由于`$user`變量被類型提示為 Eloquent 模型`App\User`,變量名稱又與 URI 中的`{user}`匹配,因此,Laravel 會自動注入與請求 URI 中傳入的 ID 匹配的用戶模型實例。如果在數據庫中找不到對應的模型實例,將會自動生成 404 異常。 #### 自定義鍵名 如果你想要模型綁定在檢索給定的模型類時使用除`id`之外的數據庫字段,你可以在 Eloquent 模型上重寫`getRouteKeyName`方法: ``` <pre class="calibre11">``` /** ?*?獲取該模型的路由的自定義鍵名。 ?* ?*?@return?string ?*/ ?public?function?getRouteKeyName(){ ?????return?'slug'; ??} ``` ``` ### 顯式綁定 要注冊顯式綁定,使用路由器的`model`方法來為給定參數指定類。在`RouteServiceProvider`類中的`boot`方法內定義這些顯式模型綁定: ``` <pre class="calibre11">``` public?function?boot(){ ????parent::boot(); ????Route::model('user',?App\User::class); ??} ``` ``` 接著,定義一個包含`{user}`參數的路由: ``` <pre class="calibre11">``` Route::get('profile/{user}',?function?(App\User?$user)?{? ???// ?}); ``` ``` 因為我們已經將所有`{user}`參數綁定至`App\User`模型,所以`User`實例將被注入該路由。例如,`profile/1`的請求會注入數據庫中 ID 為 1 的`User`實例。 如果在數據庫中找不到匹配的模型實例,就會自動拋出一個 404 異常。 #### 自定義邏輯解析 如果你想要使用自定義的解析邏輯,就使用`Route::bind`方法。傳遞到`bind`方法的`閉包`會接受 URI 中大括號對應的值,并且返回你想要在該路由中注入的類的實例: ``` <pre class="calibre11">``` /** ?*?啟動應用服務。 ?* ?*?@return?void ?*/ ?public?function?boot(){ ?????????parent::boot();???????? ?????????Route::bind('user',?function?($value)?{?????????? ???????????????return?App\User::where('name',?$value)->first()????abort(404);??? ???????????????}); ????} ``` ``` 或者,您可以重寫 Eloquent 模型上的`resolveRouteBinding`方法。 此方法會接受 URI 中大括號對應的值,并且返回你想要在該路由中注入的類的實例: ``` <pre class="calibre11">``` /** ?*?檢索綁定值的模型。 ?* ?*?@param??mixed??$value ?*?@return?\Illuminate\Database\Eloquent\Model|null ?*/ ?public?function?resolveRouteBinding($value){? ????return?$this->where('name',?$value)->first()????abort(404); ?} ``` ``` ## 回退路由 使用`Route::fallback`方法, 你可以定義在沒有其他路由匹配傳入請求時執行的路由。通常,未處理的請求會通過應用程序的異常處理程序自動呈現 “404” 頁面。 但是,因為你可以在`routes/web.php`文件中定義`fallback`路由,`web`中間件的所有中間件都將應用到路由中。 當然,你也可以根據需要向這條路由中添加額外的中間件: ``` <pre class="calibre11">``` Route::fallback(function?()?{ ????// ?}); ``` ``` > {note} 回退路由應始終是你應用程序注冊的最后一個路由。 ## 訪問控制 Laravel 包含了一個 middleware 用于控制應用程序對路由的訪問。 如果想要使用, 請將`throttle`中間件分配給一個路由或者一個路由組。`throttle`中間件會接收兩個參數,這兩個參數決定了在給定的分鐘數內可以進行的最大請求數。例如,讓我們指定一個經過身份驗證并且用戶每分鐘訪問頻率不超過 60 次的路由組: ``` <pre class="calibre11">``` Route::middleware('auth:api',?'throttle:60,1')->group(function?()?{? ???Route::get('/user',?function?()?{? ??????????//??? ???????}); ??}); ``` ``` #### 動態訪問控制 你可以根據已驗證的`User`模型的屬性,指定動態請求的最大值。例如,如果你的`User`模型包含`rate_limit`屬性,則可以將屬性名稱傳遞給`throttle`中間件,以便它用于計算最大請求數: ``` <pre class="calibre11">``` Route::middleware('auth:api',?'throttle:rate_limit,1')->group(function?()?{ ????Route::get('/user',?function?()?{?? ??????????//?? ??????}); ??}); ``` ``` ## 表單方法偽造 HTML 表單不支持`PUT`、`PATCH`或`DELETE`行為。所以當你要從 HTML 表單中調用定義了`PUT`、`PATCH`或`DELETE`行為的路由時,你將需要在表單中增加一個隱藏的`_method`輸入標簽。使用`_method`字段的值作為 HTTP 的請求方法: ``` <pre class="calibre11">``` <form?action="/foo/bar"?method="POST">? ??<input?type="hidden"?name="_method"?value="PUT">? ??<input?type="hidden"?name="_token"?value="{{?csrf_token()?}}"> </form> ``` ``` 你也可以使用`@method`模板指令生成`_method`輸入: ``` <pre class="calibre11">``` <form?action="/foo/bar"?method="POST"> ????@method('PUT') ????@csrf </form> ``` ``` ## 訪問當前路由 你可以使用 Route facade 上的`current`、`currentRouteName`和`currentRouteAction`方法來訪問處理傳入請求的路由的信息: ``` <pre class="calibre11">``` $route?=?Route::current(); $name?=?Route::currentRouteName(); $action?=?Route::currentRouteAction(); ``` ``` 如果你想知道所有可訪問的方法,可以查看 API 文檔,了解 Route facade 和 Route 實例 的基礎類。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看