2014-10-28 4 views
3

내 확장 내에서 사용하려는 Laravel에 내장되지 않은 규칙 (foobar)이 있습니다. FormRequest. 특정 규칙에 대한 사용자 정의 유효성 검사기를 만들려면 어떻게해야합니까?FormRequest에 사용자 정의 유효성 검사기를 추가하려면 어떻게합니까?

public function rules() { 
    return [ 
     'id' => ['required', 'foobar'] 
    ]; 
} 

나는 Validator::extend이 존재하지만 전 정면을 사용하고 싶지 않습니다. 내 FormRequest에 "내장"하고 싶습니다. 나는 그것을 어떻게 할 수 있으며 가능한가?

답변

4

클래스에 validator 속성을 만들고 app('validator')으로 설정하면 맞춤법 검사 방법을 사용할 수 있습니다. 그러면 그 속성으로 extend을 실행할 수 있습니다. 외관과 같습니다.

__construct 방법을 만들고이 추가
public function __construct() { 
    $this->validator = app('validator'); 

    $this->validateFoobar($this->validator); 
} 

가 그럼 그냥 외관과 마찬가지로, 첫 번째 인수로 validator 재산을 그에 extend을 실행 validateFoobar라는 새로운 방법을 만들 수 있습니다.

public function validateFoobar($validator) { 
    $validator->extend('foobar', function($attribute, $value, $parameters) { 
     return ! MyModel::where('foobar', $value)->exists(); 
    }); 
} 

더 많은 세부 사항에 대한 extendhere 사용할 수 있습니다. 결국

, 당신의 FormRequest는 다음과 같이 수 :

<?php namespace App\Http\Requests; 

use App\Models\MyModel; 
use App\Illuminate\Foundation\Http\FormRequest; 

class MyFormRequest extends FormRequest { 
    public function __construct() { 
     $this->validator = app('validator'); 

     $this->validateFoobar($this->validator); 
    } 

    public function rules() { 
     return [ 
      'id' => ['required', 'foobar'] 
     ]; 
    } 

    public function messages() { 
     return [ 
      'id.required' => 'You have to have an ID.', 
      'id.foobar' => 'You have to set the foobar value.' 
     ]; 
    } 

    public function authorize() { return true; } 

    public function validateFoobar($validator) { 
     $validator->extend('foobar', function($attribute, $value, $parameters) { 
      return ! MyModel::where('category_id', $value)->exists(); 
     }); 
    } 
} 
+0

어떻게이 작업을 수행하고 또한 새로운 검증 필터에 대한 사용자 지정 오류 메시지를 만들 것? –

+1

@JimRubenstein : ' [ 'ID'=> [ :이 같은'/ 자원/LANG/드/validation.php'에 사용자 정의 메시지를 넣을 수 있습니다 'foobar'=> '맞춤 메시지', ], ], ], ' – roNn23

+1

@JimRubenstein, [메시지] (https://github.com/laravel/framework/blob/5.0/src)를 사용할 수 있습니다. /Illuminate/Foundation/Http/FormRequest.php#L213) 메소드를 FormRequest에 추가하십시오. 예를 들어 업데이트 된 답변을 참조하십시오. – Marwelln