<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## laravel 表單驗證 ## 簡介 默認情況下,Laravel 的基類控制器使用了一個名為`ValidatesRequests`的 trait,它提供了一種方便的方法以使用各種強大的驗證規則來驗證傳入的 HTTP 請求。 ### 創建控制器 接下來,讓我們一起來看看處理這些路由的簡單控制器。我們暫時留空了`store`方法。 ~~~php <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class PostController extends Controller { /** * 顯示創建博客文章的表單 * * @return Response */ public function create() { return view('post.create'); } /** * 存儲一篇新的博客文章 * * @param Request $request * @return Response */ public function store(Request $request) { // 驗證并存儲博客文章... } } ~~~ ### 在控制器中編寫驗證邏輯 現在我們開始在`store`方法中編寫用來驗證新的博客文章的邏輯代碼。為此,我們將使用`Illuminate\Http\Request`類提供的`validate`方法。如果驗證通過,你的代碼會繼續正常運行。如果驗證失敗,則會拋出異常,并自動將對應的錯誤響應返回給用戶。 在傳統 HTTP 請求下,會生成一個重定向響應, 而對于 AJAX 請求則會發送 JSON 響應。 為了深入理解`validate`方法,讓我們接著回到`store`方法中: ~~~php /** * 存儲一篇新的博客文章 * * @param Request $request * @return Response */ public function store(Request $request) { $validatedData = $request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); // 博客文章驗證通過... } ~~~ * 如果驗證失敗,會自動生成一個對應的響應 * 如果驗證通過,那我們的控制器會繼續正常運行。 或者,驗證規則可以使用數組而不是單個`|`分隔的字符串: ~~~php $validatedData = $request->validate([ 'title' => ['required', 'unique:posts', 'max:255'], 'body' => ['required'], ]); ~~~ 你可以使用`validateWithBag`方法來驗證請求,并將所有錯誤信息儲存在一個[命名錯誤信息包](https://learnku.com/docs/laravel/8.x/validation/9374#named-error-bags)中: ~~~php $validatedData = $request->validateWithBag('post', [ 'title' => ['required', 'unique:posts', 'max:255'], 'body' => ['required'], ]); ~~~ #### 在首次驗證失敗時停止運行 有時候我們希望某個字段在第一次驗證失敗后就停止運行驗證規則,只需要將`bail`添加到規則中: ~~~php $request->validate([ 'title' => 'bail|required|unique:posts|max:255', 'body' => 'required', ]); ~~~ 在這個例子中,如果`title`字段沒有通過`unique`規則,那么不會繼續驗證`max`規則。規則會按照分配時的順序來驗證。 #### 嵌套字段的說明 如果你的 HTTP 請求包含「嵌套」參數(比如數組), 你可以在驗證規則中使用「點」語法來指定這些參數: ~~~php $request->validate([ 'title' => 'required|unique:posts|max:255', 'author.name' => 'required', 'author.description' => 'required', ]); ~~~ 另外,如果你的字段名稱包含點,則可以通過使用反斜杠將點轉義,以防止將其解釋為 “點” 語法: ~~~php $request->validate([ 'title' => 'required|unique:posts|max:255', 'v1\.0' => 'required', ]); ~~~ ### 顯示驗證錯誤信息 * 如果傳入的請求參數未通過給定的驗證規則,Laravel 會自動將用戶重定向到之前的位置。 * 另外,所有的驗證錯誤信息會自動存儲到[閃存 session](https://learnku.com/docs/laravel/8.x/session#flash-data)中。 * Laravel 會檢查 session 數據中的錯誤,會自動將其綁定到視圖中去。其中的`$errors`變量是`Illuminate\Support\MessageBag`的一個實例。 > 技巧:`$errors`由`web`中間件組提供的`Illuminate\View\Middleware\ShareErrorsFromSession`中間件綁定到視圖中。**當該中間件被應用后,`$errors`變量在您的視圖中總是可用的**,因此您可以假設`$errors`變量總是被定義了且總是安全可用的。 所以,在如下的例子中,當表單驗證失敗時,用戶將被重定向到控制器的`create`方法中,我們可在視圖中顯示錯誤信息: ~~~php <!-- /resources/views/post/create.blade.php --> <h1>Create Post</h1> @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <!-- Create Post Form --> ~~~ #### `@error`指令 您亦可使用`@error`[Blade](https://learnku.com/docs/laravel/8.x/blade)指令方便地檢查給定的屬性是否存在驗證錯誤信息。在`@error`指令中,您可以輸出`$message`變量以顯示錯誤信息: ~~~php <!-- /resources/views/post/create.blade.php --> <label for="title">Post Title</label> <input id="title" type="text" class="@error('title') is-invalid @enderror"> @error('title') <div class="alert alert-danger">{{ $message }}</div> @enderror ~~~ ### 關于可選字段的注意事項 默認情況下, 在您的 Laravel 應用的全局中間件堆棧`App\Http\Kernel`類中包含了`TrimStrings`和`ConvertEmptyStringsToNull`中間件。因此,如果您不想讓`null`被驗證器標識為非法的話,您需要將「可選」字段標志為`nullable`: ~~~php $request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', 'publish_at' => 'nullable|date', ]); ~~~ 在上述例子中,我們指定了`publish_at`字段可以是空的或者是一個有效的日期格式。如果`nullable`修飾詞沒有被添加到規則定義中,驗證器會將`null`視為無效的日期格式。 #### AJAX 請求和驗證 在上述例子中,我們使用傳統的表單發送數據到應用。當然,許多應用可能使用 AJAX 來進行請求,此時, Laravel 不會生成重定向響應。取而代之的, Laravel 將會生成一個包含錯誤信息的 JSON 響應,該響應的 HTTP 狀態碼將被置為 422 。 ## 按條件增加規則 #### 字段包含特定值跳過驗證 如果另一個字段具有給定的值,您可能偶爾希望不驗證給定字段。您可以使用`exclude_if`驗證規則來實現這一點。在本例中,如果`has_appointment`字段的值為`false`,則不會驗證`appointment_date`和`doctor_name`字段: ~~~php $v = Validator::make($data, [ 'has_appointment' => 'required|bool', 'appointment_date' => 'exclude_if:has_appointment,false|required|date', 'doctor_name' => 'exclude_if:has_appointment,false|required|string', ]); ~~~ 您可以使用`exclude_unless`規則來驗證給定字段,除非另一個字段具有給定的值: ~~~php $v = Validator::make($data, [ 'has_appointment' => 'required|bool', 'appointment_date' => 'exclude_unless:has_appointment,true|required|date', 'doctor_name' => 'exclude_unless:has_appointment,true|required|string', ]); ~~~ #### 存在時則驗證 在某些情況下,你可能希望將要驗證的字段存在于輸入數組中時,才對該字段執行驗證。可以在規則列表中增加`sometimes`來實現: ~~~php $v = Validator::make($data, [ 'email' => 'sometimes|required|email', ]); ~~~ 在上面的例子中,`email`字段只有在`$data`數組中存在時才會被驗證。 > 技巧:如果你嘗試驗證應該始終存在但可能為空的字段,請查閱[可選字段的注意事項](https://learnku.com/docs/laravel/8.x/validation/9374#a-note-on-optional-fields) #### 復雜條件驗證 有時候你可能需要增加基于更復雜的條件邏輯的驗證規則。例如,你可以希望某個指定字段在另一個字段的值超過 100 時才為必填。或者當某個指定字段存在時,另外兩個字段才能具有給定的值。增加這樣的驗證條件并不難。首先,使用 靜態規則 創建一個`Validator`實例: ~~~php $v = Validator::make($data, [ 'email' => 'required|email', 'games' => 'required|numeric', ]); ~~~ 假設我們有一個專為游戲收藏家所設計的網頁應用程序。如果游戲收藏家收藏超過一百款游戲,我們會希望他們來說明下為什么他們會擁有這么多游戲。比如說他們有可能經營了一家游戲分銷商店,或者只是為了享受收集的樂趣。為了在特定條件下加入此驗證需求,可以在`Validator`實例中使用`sometimes`方法。 ~~~php $v->sometimes('reason', 'required|max:500', function ($input) { return $input->games >= 100; }); ~~~ 傳遞給`sometimes`的第一個參數是我們需要有條件驗證的名稱字段,第二個參數是我們想要添加的規則,如果作為第三個參數的`閉包`返回`true`,則規則被添加。該方法讓構建復雜條件驗證變得簡單,你甚至可以一次為多個字段添加條件驗證: ~~~php $v->sometimes(['reason', 'cost'], 'required', function ($input) { return $input->games >= 100; }); ~~~ > 技巧:傳遞給`閉包`的`$input`參數是`Illuminate\Support\Fluent`的一個實例,可用于訪問輸入和文件。 ## 驗證數組 驗證表單的輸入為數組的字段也不再難了。 你可以使用「點」方法來驗證數組中的屬性。例如, 如果傳入的 HTTP 請求中包含`photos[profile]`字段,可以如下驗證: ~~~php $validator = Validator::make($request->all(), [ 'photos.profile' => 'required|image', ]); ~~~ 我們還可以驗證數組的每個元素。 例如,要驗證給定數組輸入中每個`email`是否是唯一的,可以這么做: ~~~php $validator = Validator::make($request->all(), [ 'person.*.email' => 'email|unique:users', 'person.*.first_name' => 'required_with:person.*.last_name', ]); ~~~ 類似地,在語言文件中你也可以使用`*`字符指定驗證消息,從而可以使用單個驗證消息定義基于數組字段的驗證規則: ~~~php 'custom' => [ 'person.*.email' => [ 'unique' => 'Each person must have a unique e-mail address', ] ], ~~~
                  <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>

                              哎呀哎呀视频在线观看