2014-11-19 3 views
6

Hi iam tworzenie aplikacji przy użyciu laravel jest jakikolwiek sposób, aby pole daty wejściowej było większe lub równe z innym polem daty za pomocą sprawdzania poprawności.jak zrobić pole danych wejściowych większe lub równe innym polu daty przy użyciu sprawdzania poprawności w laravel

Wiem, że mogę to osiągnąć za pomocą jquery i mam już działa, ale chcę wiedzieć, czy jest to możliwe dzięki weryfikacji w skali lara, ponieważ laravel ma pewne predefiniowane walidacje.

Dla przykładu

protected $validationRules = array 
    ( 
     'a' => 'date', 
     'b' => 'date|(some validation so that the b value is greater than or equal to that of 'a')' 
    ); 

EDIT

Jeśli istnieją jakiekolwiek inne podejście do rozwiązania problemu za pomocą laravel pojęcie proszę mi powiedzieć

Próbowałem

Validator::extend('val_date', function ($attribute,$value,$parameters) { 
    return preg_match("between [start date] and DateAdd("d", 1, [end date])",$value); 
}); 

Z góry dziękuję

Odpowiedz

0

Właściwe rozwiązanie byłoby, gdyby rozszerzyć walidator o własną regułę. Prosty przykład z docs:

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

Czytaj więcej here

+0

i zapoznać się z dokumentacją, ale iam nie wiem, jak napisać wyrażenie, aby zaspokoić mój stan I zostały zaktualizowane moje pytanie, co mam wypróbowany proszę spojrzeć. – megamage

-1

Tak, można użyć after:date lub before:date takiego:

protected $rules = array(
    'date' => 'after:'.$yourDate 
); 

lub alternatywnie

protected $rules = array(
    'date' => 'before:'.$yourDate 
); 

Będzie zrób dokładnie to, co opisałeś. Sprawdź również official documentation. Możesz także określić własne reguły, używając custom validation rules.

+0

dzięki za odpowiedź mam nadzieję, że po: data pozwoli tylko daty po określonej dacie potrzebuję zasady sprawdzania poprawności, aby spełnić obie te same zasady, tak aby moje pole daty zezwalało zarówno na to samo, jak i później, ale nie wcześniej. Próbowałem również "date" => 'after:'.$ yourDate, ale generuje następujący błąd: - [błąd składni, nieoczekiwane ".", oczekujące ")"] – megamage

+1

'after' i' before' nie pozwalają na równość, gdy czasy są równe. – user3856210

20

Miałem ten sam problem. before i after nie działa, gdy daty mogą być takie same. Oto moja krótka rozwiązanie:

UWAGA: laravel 05/03/25 i później mieć nowy zbudowany w regułach: before_or_equal i after_or_equal


// 5.1 or newer 
Validator::extend('before_or_equal', function($attribute, $value, $parameters, $validator) { 
    return strtotime($validator->getData()[$parameters[0]]) >= strtotime($value); 
}); 

// 5.0 & 4.2 
Validator::extend('before_or_equal', function($attribute, $value, $parameters) { 
    return strtotime(Input::get($parameters[0])) >= strtotime($value); 
}); 

$rules = array(
    'start'=>'required|date|before_or_equal:stop', 
    'stop'=>'required|date', 
); 

+1

To powinno być oznaczone jako odpowiedź –

+1

Uwaga, to nie działa dla Laravel 5.2 Zobacz moją odpowiedź. –

+1

Gdzie umieścisz pierwszy blok kodu? W twoim kontrolerze? – user3253002

8

Emil Aspman użytkownika odpowiedź jest poprawna, ale nie działa dla Laravel 5.2. to rozwiązanie działa na laravel 5.2:

Validator::extend('before_equal', function($attribute, $value, $parameters, $validator) { 
    return strtotime($validator->getData()[$parameters[0]]) >= strtotime($value); 
}); 
Powiązane problemy