Aber was ist, wenn wir mehr wollen?
Der Quellcode für dieses Tutorial ist hier verfügbar. Sie müssen nur die Komponist -Installation ausführen, um das Laravel -Framework innerhalb des Projektverzeichnisses zu installieren, bevor Sie diesen Code ausführen können.Die Notwendigkeit von mehr
<span><span><?php </span></span><span> </span><span><span>namespace RocketCandy<span>\Services\Validation</span>; </span></span><span> </span><span><span>use Illuminate<span>\Validation\Validator</span> as IlluminateValidator; </span></span><span> </span><span><span>class ValidatorExtended extends IlluminateValidator { </span></span><span> </span><span> <span>private $_custom_messages = array( </span></span><span> <span>"alpha_dash_spaces" => "The :attribute may only contain letters, spaces, and dashes.", </span></span><span> <span>"alpha_num_spaces" => "The :attribute may only contain letters, numbers, and spaces.", </span></span><span> <span>); </span></span><span> </span><span> <span>public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) { </span></span><span> <span><span>parent::</span>__construct( $translator, $data, $rules, $messages, $customAttributes ); </span></span><span> </span><span> <span>$this->_set_custom_stuff(); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Setup any customizations etc </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>protected function _set_custom_stuff() { </span></span><span> <span>//setup our custom error messages </span></span><span> <span>$this->setCustomMessages( $this->_custom_messages ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, spaces and dashes (hyphens and underscores) </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaDashSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z\s-_]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, numbers, and spaces </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaNumSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z0-9\s]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span><span>} //end of class </span></span><span> </span><span> </span><span><span>//EOF</span></span>
Hier erweitert unsere Klasse die IlluminateValidationValidator -Klasse von Laravel und fügt zwei neue Methoden (validateAlphadashSpaces () und validateAlphanumspaces () hinzu, um Daten und ihre jeweiligen Fehlermeldungen mit dem Platzhalter zu validieren: Attribut in ihnen, die die Laravel leistungssteuer durch die Laufzeit ersetzen würde, die die Laufzeit durch den Namen des Namens, was auch immer, ersetzt Datenfeld, das validiert wird.
Nun, hier zu beachten, ist, wie wir die Methoden nennen. Alle Validationsregel -Method -Namen müssen das Validierungspräfix haben und der Rest muss sich im Titelfall befinden (natürlich ohne Leerzeichen). Die Validierungsregel befindet sich in Kleinbuchstaben, in der die Methode benannt ist (ohne Validierungspräfix), und jedes Wort wird durch einen Unterstrich getrennt. Wenn wir also eine Alpha_Dash_Spaces -Validierungsregel hinzufügen möchten, wird unsere entsprechende Methode genannt ValidateAlphadashSpaces ().
Wir haben hier Alpha_Dash_Spaces und Alpha_Num_Spaces Validierungsregeln hinzugefügt. alpha_dash_spaces erlauben Buchstaben, Striche (Bindestriche und Unterstriche) und Leerzeichen, während alpha_num_spaces nur Buchstaben, Zahlen (Zahlen 0-9) und Leerzeichen zulassen.
Wir sind noch nicht damit fertig, diese Klasse erweitert nur die Validierungsklasse von Laravel. Wir müssen Laravel immer noch erkennen lassen, damit Laravel, wenn wir die neuen Regeln zu unserem Vaidation -Service hinzufügen, wissen, wie die Validierung gemäß diesen Regeln ausführt.
laravel docs geben an, dass wir dies tun können:
<span>Validator<span>::</span>resolver( function( $translator, $data, $rules, $messages ) { </span> <span>return new <span>\RocketCandy\Services\Validation\ValidatorExtended</span>( $translator, $data, $rules, $messages ); </span><span>} );</span>
Erstellen Sie ValidationExtensionServiceProvider.php in RocketCandy/Diensten/Validierung/und fügen Sie den folgenden Code hinzu:
<span><span><?php </span></span><span> </span><span><span>namespace RocketCandy<span>\Services\Validation</span>; </span></span><span> </span><span><span>use Illuminate<span>\Support\ServiceProvider</span>; </span></span><span> </span><span><span>class ValidationExtensionServiceProvider extends ServiceProvider { </span></span><span> </span><span> <span>public function register() {} </span></span><span> </span><span> <span>public function boot() { </span></span><span> <span>$this->app->validator->resolver( function( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) { </span></span><span> <span>return new ValidatorExtended( $translator, $data, $rules, $messages, $customAttributes ); </span></span><span> <span>} ); </span></span><span> <span>} </span></span><span> </span><span><span>} //end of class </span></span><span> </span><span> </span><span><span>//EOF</span></span>
Jetzt müssen wir Laravel nur sagen, dass er diesen Dienstanbieter laden soll, und wir wären alle festgelegt. Öffnen Sie Ihre App/config/app.php und fügen Sie im Anbieter -Array am Ende Folgendes hinzu:
<span><span><?php </span></span><span> </span><span><span>namespace RocketCandy<span>\Services\Validation</span>; </span></span><span> </span><span><span>use Illuminate<span>\Validation\Validator</span> as IlluminateValidator; </span></span><span> </span><span><span>class ValidatorExtended extends IlluminateValidator { </span></span><span> </span><span> <span>private $_custom_messages = array( </span></span><span> <span>"alpha_dash_spaces" => "The :attribute may only contain letters, spaces, and dashes.", </span></span><span> <span>"alpha_num_spaces" => "The :attribute may only contain letters, numbers, and spaces.", </span></span><span> <span>); </span></span><span> </span><span> <span>public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) { </span></span><span> <span><span>parent::</span>__construct( $translator, $data, $rules, $messages, $customAttributes ); </span></span><span> </span><span> <span>$this->_set_custom_stuff(); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Setup any customizations etc </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>protected function _set_custom_stuff() { </span></span><span> <span>//setup our custom error messages </span></span><span> <span>$this->setCustomMessages( $this->_custom_messages ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, spaces and dashes (hyphens and underscores) </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaDashSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z\s-_]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, numbers, and spaces </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaNumSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z0-9\s]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span><span>} //end of class </span></span><span> </span><span> </span><span><span>//EOF</span></span>
Öffnen Sie jetzt App/Rocketcandy/Services/Validation/testFormvalidator.php und aktualisieren Sie die $ Rules -Eigenschaft, damit sie so aussehen:
<span>Validator<span>::</span>resolver( function( $translator, $data, $rules, $messages ) { </span> <span>return new <span>\RocketCandy\Services\Validation\ValidatorExtended</span>( $translator, $data, $rules, $messages ); </span><span>} );</span>
Wir haben die Alpha_Dash -Validierungsregel für den Namen durch alpha_dash_spaces und alpha_num für pin_code mit alpha_num_spaces ersetzt.
.Wenn wir nun zu http: //
In diesem zweiteiligen Tutorial haben wir gelernt:
Um dieses Tutorial auf den Punkt zu halten, habe ich den Validierungsdienst in unserem Controller injiziert und dort verwendet. In einem realen Projekt würden Sie den Validierungsdienst höchstwahrscheinlich an einem anderen Ort verwenden, wo Sie die Bereinigung und den Speicher von Daten umgehen würden. Im Idealfall sollten Controller fettfrei sein und das Minimum an Code haben.
habe Gedanken? Fragen? Feuer in den Kommentaren wegfeuern.
Wie erstelle ich benutzerdefinierte Validierungsregeln in Laravel? Sie erstellen benutzerdefinierte Validierungsregeln mit der Validator :: Extend -Methode. Diese Methode nimmt zwei Parameter an: den Namen der Validierungsregel und eine Schließung, die drei Argumente empfängt - den Attributnamen, den Attributwert und ein Fehlerrückruf. Im Verschluss können Sie die Logik für Ihre benutzerdefinierte Validierungsregel definieren. Wenn die Validierung fehlschlägt, sollten Sie den Fehlerrückruf mit einer entsprechenden Fehlermeldung aufrufen.
Laravel erleichtert die Anzeige von Validierungsfehlermeldungen in Ihren Ansichten. Wenn die Validierung fehlschlägt, leitet Laravel den Benutzer mit allen in der Sitzung gespeicherten Validierungsfehlern an seinen vorherigen Standort zurück. Anschließend können Sie diese Fehler in Ihren Ansichten mithilfe der $ fehlervariablen anzeigen, die automatisch allen Ansichten von Laravel zur Verfügung gestellt wird.
Wie validiere ich Arrays in Laravel? Sie können das zu validierende Array -Feld angeben und dann die Validierungsregeln darauf anwenden. Wenn Sie beispielsweise eine Array von E -Mails haben, können Sie jede E -Mail im Array mit der Validierungsregel "E -Mail" validieren.
Kann ich benutzerdefinierte Validierungsregeln in Formularanforderungen verwenden? benutzerdefinierte Validierungsregeln in Formularanfragen. Dies kann durch Definieren der Regeln in der Regelnmethode der Formularanforderungsklasse erfolgen. Sie können diese Regeln dann verwenden, wenn Sie die Anforderungsdaten validieren. Mit allen in der Sitzung gespeicherten Validierungsfehlern. Sie können diese Fehler in Ihren Ansichten behandeln und sie dem Benutzer auf eine Weise anzeigen, die für Ihre Anwendung geeignet ist.
Das obige ist der detaillierte Inhalt vonDatenvalidierung in Laravel: Der richtige Weg - benutzerdefinierte Validatoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!