<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之旅 廣告
                ## laravel自定義驗證規則 ## 自定義驗證規則 ### 使用規則對象 盡管 Laravel 提供了多種多樣有用的校驗規則;但您亦可進行自定義。注冊自定義校驗規則的方法之一便是使用規則對象。您可以使用`make:rule`生成新的規則對象。接下來,讓我們使用該命令生成一個校驗字符串是否是大寫的規則, Laravel 會將新規則置于`app/Rules`目錄中: ~~~php php artisan make:rule Uppercase ~~~ 當規則創建成功后,我們便可定義其行為。規則對象包含兩個方法:`passes`和`message`。`passes`方法接收屬性值及其名稱,它應該返回以`true`和`false`表示的屬性值是否通過驗證的結果。`message`方法應該返回驗證失敗時使用的錯誤信息: ~~~php <?php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class Uppercase implements Rule { /** * 判斷是否通過驗證規則 * * @param string $attribute * @param mixed $value * @return bool */ public function passes($attribute, $value) { return strtoupper($value) === $value; } /** * 獲取校驗錯誤信息 * * @return string */ public function message() { return 'The :attribute must be uppercase.'; } } ~~~ 如果您想要從您的翻譯文件中獲取錯誤信息,您可以在您的`message`中使用`trans`助手方法: ~~~php /** * 獲取校驗錯誤信息 * * @return string */ public function message() { return trans('validation.uppercase'); } ~~~ 一旦定義了規則,您便可以通過將規則的實例化與其他校驗規則一起傳遞給驗證器: ~~~php use App\Rules\Uppercase; $request->validate([ 'name' => ['required', 'string', new Uppercase], ]); ~~~ ### 使用閉包 如果您的規則在應用中僅僅使用一次,那您便可使用閉包來代替規則對象。閉包函數接收屬性的方法,屬性的值以及在校驗失敗時的回調函數`$fail`: ~~~php $validator = Validator::make($request->all(), [ 'title' => [ 'required', 'max:255', function ($attribute, $value, $fail) { if ($value === 'foo') { $fail($attribute.' is invalid.'); } }, ], ]); ~~~ ### 使用擴展 另一種注冊自定義校驗規則的方式是在`Validator`[門面](https://learnku.com/docs/laravel/8.x/facades)中使用`extend`方法。接下來,讓我們在[服務提供者](https://learnku.com/docs/laravel/8.x/providers)中使用這個方法來注冊一個自定義校驗規則: ~~~php <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Validator; class AppServiceProvider extends ServiceProvider { /** * 注冊服務提供器 * * @return void */ public function register() { // } /** * 驅動應用服務 * * @return void */ public function boot() { Validator::extend('foo', function ($attribute, $value, $parameters, $validator) { return $value == 'foo'; }); } } ~~~ 自定義校驗閉包函數接收四個參數:要被驗證的屬性名稱`$attribute`,要被驗證的屬性值`$value`,傳入驗證規則的參數數組`$parameters`以及`Validator`實例。 您亦可通過傳遞類和方法到`extend`方法中來代替閉包: ~~~php Validator::extend('foo', 'FooValidator@validate'); ~~~ #### 定義錯誤信息 您還需要為您的自定義規則定義錯誤信息。您既可使用行內的自定義信息數組,也可將其添加到驗證語言文件中以實現之。錯誤信息應該被置于數組的第一位,而不是放在只用于存放屬性指定錯誤信息的`custom`數組內: ~~~php "foo" => "Your input was invalid!", "accepted" => "The :attribute must be accepted.", // 其余的錯誤信息... ~~~ 在創建自定義校驗規則時,您可能需要為錯誤信息自定義占位符。您可以通過創建自定義驗證器然后調用`Validator`門面的`replacer`方法以實現之。您可以在[服務提供者](https://learnku.com/docs/laravel/8.x/providers)的`boot`方法執行如下操作: ~~~php /** * 驅動應用程序 * * @return void */ public function boot() { Validator::extend(...); Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) { return str_replace(...); }); } ~~~ ### 隱式擴展 默認情況下,當要驗證的屬性不存在或者包含一個空字符串時,包含自定義擴展的校驗規則是不會執行的。例如,[`unique`](https://learnku.com/docs/laravel/8.x/validation/9374#rule-unique)規則不會校驗空字符串: ~~~php $rules = ['name' => 'unique:users,name']; $input = ['name' => '']; Validator::make($input, $rules)->passes(); // true ~~~ 如果想要實現即使屬性為空,規則也要校驗,那么就需要暗示該屬性是必須的。要創建這樣的 「隱式」擴展,請使用`Validator::extendImplicit()`方法: ~~~php Validator::extendImplicit('foo', function ($attribute, $value, $parameters, $validator) { return $value == 'foo'; }); ~~~ > 注意:「隱式」擴展僅僅暗示該屬性是必須的。至于它到底是確實還是空值,這取決于你。 #### 隱式規則對象 如果您想在屬性為空時執行規則對象,那么您應該實現`Illuminate\Contracts\Validation\ImplicitRule`接口。這個接口將充當驗證器的 「標識接口」;因此,它不會包含任何您需要實現的方法。
                  <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>

                              哎呀哎呀视频在线观看