自定義驗證規(guī)則

2018-02-24 15:52 更新

注冊自定義驗證規(guī)則

Laravel 提供了各種有用的驗證規(guī)則,但是,您可能希望可以設(shè)定自定義驗證規(guī)則。注冊生成自定義的驗證規(guī)則的方法之一就是使用 Validator::extend 方法:

Validator::extend('foo', function($attribute, $value, $parameters)
{
    return $value == 'foo';
});

自定義驗證器閉包接收三個參數(shù):要被驗證的 $attribute(屬性) 的名稱,屬性的值 $value,傳遞至驗證規(guī)則的 $parameters 數(shù)組。

您同樣可以傳遞一個類和方法到 extend 方法中,取代原本的閉包:

Validator::extend('foo', 'FooValidator@validate');

注意,您同時需要為您的自定義規(guī)則制訂一個錯誤信息。您可以使用行內(nèi)自定義信息數(shù)組或是在認證語言文件里新增。
擴展 Validator 類

除了使用閉包回調(diào)來擴展 Validator 外,您一樣可以直接擴展 Validator 類。您可以寫一個擴展自 Illuminate\Validation\Validator 的驗證器類。您也可以增加驗證方法到以 validate為開頭的類中:

<?php

class CustomValidator extends Illuminate\Validation\Validator {

    public function validateFoo($attribute, $value, $parameters)
    {
        return $value == 'foo';
    }

}

拓展自定義驗證器解析器

接下來,您需要注冊您自定義驗證器擴展:

Validator::resolver(function($translator, $data, $rules, $messages)
{
    return new CustomValidator($translator, $data, $rules, $messages);
});

當創(chuàng)建自定義驗證規(guī)則時,您可能有時需要為錯誤信息定義自定義的占位符。您可以如上所述創(chuàng)建一個自定義的驗證器,然后增加 replaceXXX 函數(shù)進驗證器中。

protected function replaceFoo($message, $attribute, $rule, $parameters)
{
    return str_replace(':foo', $parameters[0], $message);
}

如果您想要增加一個自定義信息 "replacer" 但不擴展 Validator類,您可以使用 Validator::replacer 方法:

Validator::replacer('rule', function($message, $attribute, $rule, $parameters)
{
    //
});
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號