Laravel 4: bestätigen Sie start-und end-Datum mit vor-und nach der Validierung
Ich prüfen will zwei Datum-Felder in einer form vor, die from_date und end_date. Müssen, überprüfen, from_date ist weniger als end_date.
$rules = array('from_date' => array('sometimes','date_format:"Y-m-d"', 'before:'.Input::get('to_date') ),
'to_date' => array('sometimes','date_format:"Y-m-d"', 'after:'.Input::get('from_date') ) );
Dies ist, was ich versucht habe. Aber das funktioniert nicht. Wenn ich die to_date als leeren Wert, wird durch den Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laravel 5:
Hier ist mehr umfassende Ansatz folgt modernen Grundsätzen und ist mehr Laravel-wie. Dies ist ein wenig komplexer, aber immer noch leicht zu Folgen und das Ergebnis ist viel sauberer.
Lassen Sie uns beginnen, indem Sie ein paar Dinge. Wir reduzieren diese auf das spezifische problem, mit neueren array-syntax und Formatierung.
Nun erstellen wir eine neue Anfrage mit
php artisan make:request StoreWhateverRequest
. Dadurch wird derApp/HTTP/Request/StoreWhateverRequest.php
- Datei. Öffnen, und legen Sie Ihre Regeln in den Rückgabe-array derrules()
Funktion.Wird dies noch nicht funktionieren, weil
after_field
ist nicht verfügbar, noch zu gebrauchen. Wir schaffen das. Wir brauchen eine neue Klasse, die Sie erweitert validator. Sie können ihn inapp/Services
. Wir brauchen etwas ähnliches wie:In der oben haben wir:
$attribute
das ist der name des Feldes prüfen wir (to_date),$value
ist der Wert des Feldes prüfen wir und$parameters
ist der Parameter, die wir übergeben dem Validator(from_date) gesehen in'to_date' => 'date|afterField:from_date'
. Wir müssen auch die anderen Datenfelder übergeben dem Validator, können wir diese mit$this->data
. Dann müssen wir nur Vorform der Logik entsprechend. Sie wirklich brauchen noch nicht einmal Carbon hier aber sicher sein, analysiert die Zeichenfolge, so dass wir nicht tun, string-Vergleich.Nun müssen wir diesen laden in die Anwendung. Dazu setzen Sie den folgenden code innerhalb der
boot()
Funktion inapp/Providers/AppServiceProviders.php
.Der Letzte Schritt ist der einfachste. Nur injizieren und Instanz
StoreWhateverRequest
in unserem Controller.Alles erledigt. Ich denke, dies ist eine ziemlich SOLIDE Art und Weise das problem zu lösen.
before
undafter
Prüfungen. In diesem Fall verwenden Sie einfachafter:from_date
Bitte benutzen Sie den untenstehenden code in laravel 5.2 und es funktioniert gut für die Validierung von start-und Ende-Datum.
Ich weiß, es ist eine Frage, über Laravel 4 ABER, wenn Sie mit Laravel 5.3 jetzt können Sie mit etwas wie:
Kam gerade über diese und dachte, ich würde teilen eine Antwort hab ich gefunden: Vergleichen Sie die Attribute in der Validierung
Im Grunde, Sie würde erstellen Sie eine neue Bestätigung, erstreckt Beleuchten\Validation\Validator und schreiben Sie eine benutzerdefinierte Regel in es:
dann in Ihrem validator verwenden Sie die neue Regel:
Jedenfalls,
Habe ich so wie dieses. So, dass selbst wenn ein Datum in der form ist leer, das auto zu füllen und überprüfen Sie die Validierung
Dies kann nicht die Antwort sein für das, was ich gefragt habe. Aber ich brauchte nur eine Möglichkeit, dies zu beenden. Möglicherweise wird hilfreich für andere.