<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 功能強大 支持多語言、二開方便! 廣告
                # 自定義驗證規則 ### [](https://octobercms.com/docs/services/validation#custom-validation-rules)自定義驗證規則 #### 注冊自定義驗證規則 有多種有用的驗證規則;但是,您可能希望自己指定一些。 建議添加自己的驗證規則的方法是通過`extend`方法擴展Validator實例。在October CMS插件中,可以將其添加到注冊文件中的`boot()`回調方法中`Plugin.php`。 您可以使用自定義驗證規則將Validator實例擴展為`Closure`或`Rule`對象。 #### 使用閉包 如果只需要在整個插件或應用程序中指定一次的自定義規則的功能,則可以使用Closure定義規則。第一個參數定義規則的名稱,第二個參數提供閉包。 ~~~ use Validator; public function boot() { Validator::extend('foo', function($attribute, $value, $parameters) { return $value == 'foo'; }); } ~~~ 定制驗證程序Closure接收三個參數:`$attribute`被驗證的名稱,`$value`屬性的和`$parameters`傳遞給規則的數組。 您也可以將類和方法傳遞給`extend`方法,而不是傳遞給Closure: ~~~ Validator::extend('foo', 'FooValidator@validate'); ~~~ 使用您的自定義規則擴展驗證器后,您需要將其添加到規則定義中。例如,您可以將其添加到`$rules`模型的數組中。 ~~~ public $rules = [ 'field' => 'foo' ]; ~~~ #### 使用規則對象 一個`Rule`對象表示您的模型實現了一個可重復使用的驗證規則`Illuminate\Contracts\Validation\Rule`的合同。每個規則對象必須提供三種方法:`passes`確定給定值是否通過驗證的`validate`方法,在驗證時調用的`message`方法以及定義默認后備錯誤消息的方法。 ~~~ <?php use Illuminate\Contracts\Validation\Rule; class Uppercase implements Rule { /** * Determine if the validation rule passes. * * @param string $attribute * @param mixed $value * @return bool */ public function passes($attribute, $value) { return strtoupper($value) === $value; } /** * Validation callback method. * * @param string $attribute * @param mixed $value * @param array $params * @return bool */ public function validate($attribute, $value, $params) { return $this->passes($attribute, $value); } /** * Get the validation error message. * * @return string */ public function message() { return 'The :attribute must be uppercase.'; } } ~~~ 要使用您的規則對象擴展Validator,您可以將類的實例提供給Validator`extend`方法: ~~~ Validator::extend('uppercase', Uppercase::class); ~~~ `Rule`對象應存儲在插件目錄內的**/ rules**子目錄中。 #### 定義錯誤信息 您還需要為自定義規則定義錯誤消息。您可以使用嵌入式自定義消息數組,也可以通過在驗證語言文件中添加條目來實現。此消息應放置在數組的第一級。 ~~~ "foo" => "Your input was invalid!", "accepted" => "The :attribute must be accepted.", ~~~ 對于`Rule`對象,您可以通過提供`message`返回字符串的方法來設置后備錯誤消息。 創建自定義驗證規則時,有時可能需要為錯誤消息定義自定義占位符替換。您可以通過`replacer`在Validator外觀上調用該方法來實現。您也可以在`boot`插件的方法中執行此操作。 ~~~ public function boot() { Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) { // return a message as a string }); } ~~~ 回調接收4個參數:`$message`是驗證者返回的消息,是驗證`$attribute`失敗的屬性,`$rule`是規則對象以及`$parameters`是使用驗證規則定義的參數。例如,您可以將列名插入到參數中定義的消息中: ~~~ public function boot() { Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) { return str_replace(':column', $parameters[0], $message); }); } ~~~ 如果希望通過錯誤消息支持多種語言,則需要`translator.beforeResolve`在插件中監聽事件,因為`boot`在完全啟用翻譯支持之前,可以運行插件的方法。 ~~~ public function boot() { Event::listen('translator.beforeResolve', function ($key, $replaces, $locale) { if ($key === 'validation.uppercase') { return Lang::get('plugin.name::lang.validation.uppercase'); } }); } ~~~ #### 注冊自定義驗證程序解析器 如果希望為應用程序提供大量自定義規則,則還可以定義驗證程序解析器。請注意,每個Validation實例只能定義一個解析器,因此不建議在插件中定義解析器,除非您使用自己的Validation實例而不是全局Validator外觀。 要定義解析器,您可以`resolver`在Validator外觀中為該方法提供一個Closure。 ~~~ Validator::resolver(function($translator, $data, $rules, $messages, $customAttributes) { return new CustomValidator($translator, $data, $rules, $messages, $customAttributes); }); ~~~ 解析器支持的每個規則都是使用`validateXXX`方法定義的。例如,`foo`驗證規則將尋找稱為的方法`validateFoo`。該`validate`方法應返回一個布爾值,關于給定是否`$value`通過驗證。 ~~~ public function validateFoo($attribute, $value, $parameters) { // return whether the value passes validation } ~~~ 與Validator`replacer`方法一樣,有時可能需要為錯誤消息定義自定義占位符替換。您可以通過定義`replaceXXX`方法在解析器中執行此操作。 ~~~ protected function replaceFoo($message, $attribute, $rule, $parameters) { return str_replace(':foo', $parameters[0], $message); } ~~~
                  <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>

                              哎呀哎呀视频在线观看