2015-05-18 11 views
6

Chcę uzyskać parametr przekazany w regule sprawdzania poprawności.Niestandardowa weryfikacja Laravel - pobierz parametry

Dla niektórych reguł sprawdzania poprawności, które utworzyłem, jestem w stanie uzyskać parametr z reguły sprawdzania poprawności, ale dla kilku reguł nie otrzymuje on parametrów.

W modelu używam następujący kod:

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

W ValidatorServiceProvider używam następujący kod:

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; 
     } 
    }); 

Ale tu nie jestem w stanie uzyskać identyfikator sponsora przy użyciu następujących:

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

Wypróbuj 'dd ($ parameters [0])', aby sprawdzić, czy parametr został poprawnie przekazany. – lukasgeiter

+0

wyświetla się dd ($ parametry [0]) - "sponsor_id" –

Odpowiedz

9

Jako czwarty cały walidator przechodzi do zamknięcia zdefiniowanego przez użytkownika extends. Można używać, aby uzyskać wszystkie dane, które są zatwierdzone:

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

Nawiasem mówiąc używam array_get tutaj, aby uniknąć błędów, jeśli przeszedł input name nie istnieje.

+1

Użyłem jak poniżej, ale zwraca on wartość null - $ sponsor_id = array_get ($ validator-> getData(), $ parameters [0], null); dd ($ sponsor_id); - czy muszę przekazać walidator $ do następujących: $ validator = Validator :: make ($ input, EventSponsor :: $ rules_sponsor_event_check); –

+0

Proszę sprawdzić, co '$ validator-> getData()' faktycznie zwraca – lukasgeiter

+0

$ validator-> getData() - zadziałało, dziękuję za zapisanie mojego dnia. –

0

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

Zwyczaj walidator Zamknięcie otrzymuje trzy argumenty: nazwę atrybutu $ są zatwierdzone, wartość $ atrybutu oraz tablicę od $ parametrów przekazywanych do reguły.

Dlaczego Input::get($parameters); następnie? powinieneś sprawdzić zawartość parametrów $.

Edytuj. Ok, wymyśliłem, co próbujesz zrobić. Nie będziesz czytać niczego z danych wejściowych, jeśli wartość, którą próbujesz zdobyć, nie zostanie przesłana. Spójrz na

dd(Input::all()); 

wtedy okaże się, że

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

pracuje w miejscach, gdzie sponsor_id został zgłosił.

+0

Parametry zawierają nazwę innego parametru wejściowego. PO chce uzyskać wartość tego. – lukasgeiter

+0

$ input = Input :: get ($ parameters); dd ($ input); rzuca wyjątek - wyjątek ErrorException w linii Arr.php 219: Niedozwolony typ przesunięcia w isset lub pusty –

+0

Sprawdź aktualizację. –

Powiązane problemy