laravel 設置自定義 Validator


轉自:https://learnku.com/docs/laravel/5.4/validation/1234#custom-validation-rules

自定義驗證規則

Laravel 提供了許多有用的驗證規則。但你可能想自定義一些規則。注冊自定義驗證規則的方法之一,就是使用 Validator Facade 中的 extend 方法,讓我們在 服務提供者 中使用這個方法來注冊自定義的驗證規則:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class AppServiceProvider extends ServiceProvider
{
    /**
     * 啟動任意應用程序服務。
     *
     * @return void
     */
    public function boot()
    {
        Validator::extend('foo', function ($attribute, $value, $parameters, $validator) {
            return $value == 'foo';
        });
    }

    /**
     * 注冊服務容器。
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

 

自定義的驗證閉包接收四個參數:要被驗證的屬性名稱 $attribute,屬性的值 $value,傳入驗證規則的參數數組 $parameters,及 Validator 實例。

除了使用閉包,你也可以傳入類和方法到 extend 方法中:

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

自定義錯誤消息

另外你可能還需要為自定義規則來定義一個錯誤消息。這可以通過使用自定義內聯消息數組或是在驗證語言包中加入新的規則來實現。此消息應該被放在數組的第一級,而不是被放在 custom 數組內,這是僅針對特定屬性的錯誤消息:

"foo" => "你的輸入是無效的!",

"accepted" => ":attribute 必須被接受。",

// 其余的驗證錯誤消息...

 

當你在創建自定義驗證規則時,你可能需要定義占位符來取代錯誤消息。你可以像上面所描述的那樣通過 ValidatorFacade 來使用 replacer 方法創建一個自定義驗證器。通過 服務提供者 中的 boot 方法可以實現:

/**
 * 啟動任意應用程序服務。
 *
 * @return void
 */
public function boot()
{
    Validator::extend(...);

    Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) {
        return str_replace(...);
    });
}
 

隱式擴展功能

默認情況下,若有一個類似 required 這樣的規則,當此規則被驗證的屬性不存在或包含空值時,其一般的驗證規則(包括自定擴展功能)都將不會被運行。例如,當 integer 規則的值為 null 時 unique 將不會被運行:

$rules = ['name' => 'unique'];

$input = ['name' => null];

Validator::make($input, $rules)->passes(); // true

如果要在屬性為空時依然運行此規則,則此規則必須暗示該屬性為必填。要創建一個「隱式」擴展功能,可以使用 Validator::extendImplicit() 方法:

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

{note} 一個「隱式」擴展功能只會 暗示 該屬性為必填。它的實際屬性是否為無效屬性或空屬性主要取決於你。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM