2016-03-28 48 views
5

我需要讓我自己的驗證,擴展Illuminate\Validation\ValidatorLaravel如何製作自定義驗證器?

我已閱讀這裏的答案給出的例子:Custom validation in Laravel 4

但問題是它沒有清楚地顯示瞭如何使用自定義的驗證。它不顯式調用自定義驗證程序。你可以給我一個例子如何調用自定義驗證器。

+0

這裏創建Closures的老方法好得多是一個自定義的驗證規則的檢查[複合唯一列(一個例子http://stackoverflow.com/問題/ 26683762 /如何對附加聯合獨特的字段,驗證規則,在-laravel-26684043分之4#26684043)。 – Bogdan

回答

0

我不知道這是你想要的,但要設置海關規則,你首先必須擴展自定義規則。

Validator::extend('custom_rule_name',function($attribute, $value, $parameters){ 
    //code that would validate 
    //attribute its the field under validation 
    //values its the value of the field 
    //parameters its the value that it will validate againts 
}); 

則該規則添加到您的驗證規則

$rules = array(
    'field_1' => 'custom_rule_name:parameter' 
); 
1

Laravel 5.5後,您可以創建自己的自定義驗證規則對象。

爲了創造新的規則,只需運行工匠命令:

php artisan make:rule GreaterThanTen 

laravel將會把新規則類的app/Rules目錄

自定義對象驗證規則的例子看起來是這樣的:

namespace App\Rules; 

use Illuminate\Contracts\Validation\Rule; 

class GreaterThanTen implements Rule 
{ 
    // Should return true or false depending on whether the attribute value is valid or not. 
    public function passes($attribute, $value) 
    { 
     return $value > 10; 
    } 

    // This method should return the validation error message that should be used when validation fails 
    public function message() 
    { 
     return 'The :attribute must be greater than 10.'; 
    } 
} 

隨着定義的自定義規則,你可以用它在你的控制器的驗證,像這樣:

public function store(Request $request) 
{ 
    $request->validate([ 
     'age' => ['required', new GreaterThanTen], 
    ]); 
} 

這種方式是不是在AppServiceProvider