2015-05-18 2 views
6

Я хочу получить параметр, переданный в правиле проверки.Laravel custom validation - получить параметры

Для определенных правил проверки, которые я создал, я могу получить параметр из правила проверки, но для нескольких правил он не получает параметры.

В модели я использую следующий код:

public static $rules_sponsor_event_check = array(
    'sponsor_id' => 'required', 
    'event_id' => 'required|event_sponsor:sponsor_id' 
); 

В ValidatorServiceProvider Я использую следующий код:

Validator::extend('event_sponsor', function ($attribute, $value, $parameters) { 
     $sponsor_id = Input::get($parameters[0]); 
     $event_sponsor = EventSponsor::whereIdAndEventId($sponsor_id, $value)->count(); 

     if ($event_sponsor == 0) { 
      return false; 
     } else { 
      return true; 
     } 
    }); 

Но здесь я не в состоянии получить спонсорскую идентификатор используя следующее:

$sponsor_id = Input::get($parameters[0]); 
+0

Попробуйте 'dd ($ parameters [0])', чтобы проверить, правильно ли передан параметр. – lukasgeiter

+0

dd ($ parameters [0]) отображается - «sponsor_id» –

ответ

9

В качестве 4-го целого валидатора передается закрытие, которое вы определяете с помощью extends. Вы можете использовать это, чтобы получить все данные, которые проверенные:

Validator::extend('event_sponsor', function ($attribute, $value, $parameters, $validator) { 
    $sponsor_id = array_get($validator->getData(), $parameters[0], null); 
    // ... 
}); 

Кстати, я использую array_get здесь, чтобы избежать каких-либо ошибок, если передаваемая ввода имя не существует.

+1

Я использовал как следующий, но возвращает null - $ sponsor_id = array_get ($ validator-> getData(), $ parameters [0], null); dd ($ sponsor_id); - Мне нужно передать $ validator в следующее: $ validator = Validator :: make ($ input, EventSponsor :: $ rules_sponsor_event_check); –

+0

Пожалуйста, проверьте, что '$ validator-> getData()' на самом деле возвращает – lukasgeiter

+0

$ validator-> getData() - работал, спасибо за сохранение моего дня. –

0

http://laravel.com/docs/5.0/validation#custom-validation-rules

Обычай валидатор Закрытие принимает три аргумента: имя $ атрибута проверяемого, в $ значение атрибута и массив от $ параметров, передаваемых из этого правила.

Почему именно Input::get($parameters);? вы должны проверить содержимое $ parameters.

Редактировать. Хорошо, я понял, что вы пытаетесь сделать. Вы не будете читать что-либо из ввода, если значение, которое вы пытаетесь получить, не отправляется. Посмотрите

dd(Input::all()); 

Вы тогда увидите, что

sponsor_id=Input::get($parameters[0]); 

работает в тех местах, где sponsor_id была занесена.

+0

Параметры содержат имя другого входного параметра. OP хочет получить значение этого. – lukasgeiter

+0

$ input = Вход :: get ($ parameters); dd ($ input); бросает исключение - Исключение ошибки в строке Arr.php 219: Недопустимый тип смещения в isset или пустой –

+0

Проверьте обновление, пожалуйста. –