2014-11-19 17 views
6

Hi iam lo sviluppo di un'applicazione utilizzando laravel esiste un modo per rendere un campo data di input maggiore o uguale a un altro campo data utilizzando la convalida.come rendere un campo data di input maggiore o uguale a un altro campo data utilizzando la convalida in laravel

So che posso ottenere questo attraverso jquery e ho già ottenuto che funziona, ma voglio sapere se questo è raggiungibile attraverso la convalida di laravel poiché laravel ha alcune convalide predefinite.

Per esempio

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

EDIT

Se c'è qualche altro approccio per risolvere il problema utilizzando il concetto laravel prego di dirmi

ho cercato

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

Grazie in anticipo

risposta

0

La soluzione corretta sarebbe se si estendesse il Validatore con la propria regola. Un semplice esempio dalla documentazione:

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

Leggi tutto here

+0

ho letto la documentazione ma non sono sicuro di come scrivere l'espressione per soddisfare la mia condizione ho aggiornato la mia domanda con quello che ho provato per favore dare un'occhiata. – megamage

-1

Sì, è possibile utilizzare after:date o before:date come questo:

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

o in alternativa

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

Sarà fai esattamente quello che hai descritto. Controlla anche il official documentation. È inoltre possibile specificare le proprie regole utilizzando custom validation rules.

+0

grazie per la tua risposta, spero dopo: la data consentirà solo le date successive alla data specificata, ho bisogno della regola di convalida per soddisfare sia dopo che la stessa regola in modo che il mio campo data consenta la data sia uguale sia dopo, ma non prima. Ho anche provato 'date' => 'dopo:'.$ yourDate, ma genera il seguente errore: - [errore di sintassi, imprevisto '.', in attesa di ')'] – megamage

+1

'after' e' before' non consentono l'uguaglianza quando i tempi sono uguali. – user3856210

20

Ho avuto lo stesso problema. before e after non funziona quando le date potrebbero essere le stesse. Qui è la mia soluzione a breve:

NOTA: laravel 5.3.25 e successive dispongono di nuova costruzione nelle regole: before_or_equal e 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

Questo dovrebbe essere contrassegnato come risposta –

+1

Nota questo non funziona per Laravel 5.2 Vedere la mia risposta. –

+1

Dove metti il ​​primo blocco di codice? Nel tuo controller? – user3253002

8

Emil Aspman di la risposta è corretta, ma non funziona con Laravel 5.2. questa soluzione funziona per Laravel 5.2:

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