Eines der (wenigen) Dinge, die ich an Laravel nicht mag, ist, dass Sie den Validierungscode nicht einfach von Ihrem Controller auf Ihre Modelle verschieben können. Wenn ich Software schreibe, wende ich gerne das Prinzip „Fat -Modelle, Skinny Controller“ an. Für mich ist es für mich also keine gute Sache, den Validierungscode in den Controller zu schreiben.
Um dies zu lösen, möchte ich leidenschaftlich vorstellen, ein großartiges Paket für Laravel 4. Um präzise zu sein, präsentiert sich Leidenschaft als "selbst validierende intelligente Modelle für Laravel Framework 4s eloquentes Orm". Mit anderen Worten: Genau das, was wir brauchen!
Wie Sie sich vorstellen können, ist es im Grunde eine Erweiterung der eloquenten Modellklasse. Dieses Paket verfügt über neue Funktionen, Dienstprogramme und Methoden, die sich der Eingabevalidierung und anderen kleinen Dingen widmen.
Natürlich werde ich keine vollständige Anwendung implementieren: Ich möchte nur einige Prinzipien erklären, also werde ich einige Controller und Modelle machen - keine Ansichten. Danach werde ich den Code mit Ardent "
übersetzen".Unsere Aufgabenliste zählt zwei verschiedene Entitäten:
Erstellen Sie die Migrationsdatei mit dem Befehl
php artisan migrate:make todo_setup
php artisan migrate:make todo_setup
Jetzt haben wir unsere Tische. Es ist Zeit, unsere Modelle zu erstellen. Sogar hier haben wir nur sehr wenige Zeilen zu schreiben. Hier ist das Benutzermodell (das ist auch das Standard).
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Database\Schema\Blueprint</span>; </span></span><span> <span>use Illuminate<span>\Database\Migrations\Migration</span>; </span></span><span> </span><span> <span>class TodoSetup extends Migration { </span></span><span> </span><span> <span>/** </span></span><span><span> * Run the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function up() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>create('users', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id')->unsigned(); </span></span><span> </span><span> <span>$table->string('first_name'); </span></span><span> <span>$table->string('last_name'); </span></span><span> <span>$table->string('email'); </span></span><span> <span>$table->string('password', 60); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> <span>}); </span></span><span> </span><span> <span>Schema<span>::</span>create('tasks', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id'); </span></span><span> </span><span> <span>$table->string('name'); </span></span><span> <span>$table->boolean('status'); </span></span><span> </span><span> <span>$table->integer('user_id')->unsigned(); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> </span><span> <span>$table->index('user_id'); </span></span><span> <span>}); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Reverse the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function down() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>dropIfExists('users'); </span></span><span> <span>Schema<span>::</span>dropIfExists('tasks'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Ich habe gerade die Aufgabenmethode hinzugefügt, um die Beziehung zum Aufgabenmodell zu beschreiben.
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Auth\UserTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\UserInterface</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>; </span></span><span> </span><span> <span>class User extends Eloquent implements UserInterface, RemindableInterface { </span></span><span> </span><span> <span>use UserTrait, RemindableTrait; </span></span><span> </span><span> <span>/** </span></span><span><span> * The database table used by the model. </span></span><span><span> * </span></span><span><span> * <span>@var <span>string</span> </span></span></span><span><span> */ </span></span><span> <span>protected $table = 'users'; </span></span><span> </span><span> <span>/** </span></span><span><span> * The attributes excluded from the model's JSON form. </span></span><span><span> * </span></span><span><span> * <span>@var <span>array</span> </span></span></span><span><span> */ </span></span><span> <span>protected $hidden = array('password', 'remember_token'); </span></span><span> </span><span> <span>public function tasks() </span></span><span> <span>{ </span></span><span> <span>return $this->hasMany('Task'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Wir haben gerade unseren Ausgangspunkt gemacht. Von nun an werden wir gleich nach der Installation zwei verschiedene Situationen sehen: Erstens die „normale“ Version des Codes ohne leidenschaftlich. Gleich danach werden wir einen Vergleich mit der „verbesserten“ Version durchführen. Sie werden den Unterschied bemerken, vertrauen Sie mir.
Beginnen wir!
Die Installation von Ardent ist mit dem Komponisten sehr einfach. Fügen Sie einfach die Abhängigkeit zur Datei composer.json Ihres Projekts hinzu.
<span><span><?php </span></span><span> </span><span> <span>class Task extends <span>\Eloquent</span> { </span></span><span> <span>protected $fillable = []; </span></span><span> </span><span> <span>public function user() </span></span><span> <span>{ </span></span><span> <span>return $this->belongsTo('User'); </span></span><span> <span>} </span></span><span> <span>}</span></span>
Dann müssen Sie nach dem Update nur die leidenschaftliche Klasse in Ihren Modellen wie SO erweitern:
<span>{ </span> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
… und du bist bereit zu gehen!
Das erste, was zu tun ist, ist zu analysieren, wie leidenschaftlich unser Leben die Implementierung der Validierung erleichtert. Wir wissen bereits, wie man es mit Laravel macht. Erstellen wir ein klassisches Beispiel: Die Post -Methode, mit der Daten aus dem Formular eingehen.
In einer „normalen“ Situation würden wir so etwas machen:
<span><span><?php </span></span><span> <span>class User extends <span>\LaravelBook\Ardent\Ardent</span> { </span></span><span> <span>// model code here! </span></span><span> <span>}</span></span>
Mit leidenschaftlich ändern sich die Dinge ein wenig. Wie Sie sich leicht vorstellen können, werden die Validierungsregeln direkt in das Modell verschoben: Wir werden hier unsere „Restyle“ beginnen. Öffnen Sie also die Modelldatei und ändern Sie sie so:
<span><span><?php </span></span><span> </span><span> <span>public function postSignup() </span></span><span> <span>{ </span></span><span> <span>$rules = array( </span></span><span> <span>'first_name' => 'required', </span></span><span> <span>'last_name' => 'required', </span></span><span> <span>'email' => 'required|email|unique:users', </span></span><span> <span>'password' => 'required|min:8' </span></span><span> <span>); </span></span><span> </span><span> <span>$messages = array( </span></span><span> <span>'first_name.required' => 'First name is required.', </span></span><span> <span>'last_name.required' => 'Last name is required.', </span></span><span> <span>'email.required' => 'Email is required.', </span></span><span> <span>'password.required' => 'Password is required.', </span></span><span> </span><span> <span>'email.email' => 'Use a real email address!', </span></span><span> <span>'email.unique' => 'This email address already exists!', </span></span><span> <span>'password.min' => 'Password must be at least 8 character long.' </span></span><span> <span>); </span></span><span> </span><span> <span>$validator = Validator<span>::</span>make(Input<span>::</span>all(), $rules, $messages); </span></span><span> </span><span> <span>if($validator->fails()) </span></span><span> <span>{ </span></span><span> <span>return Redirect<span>::</span>to('user/signup')->with('errors', $validator->messages()); </span></span><span> <span>} </span></span><span> </span><span> <span>$user = new User; </span></span><span> </span><span> <span>$user->first_name = Input<span>::</span>get('first_name'); </span></span><span> <span>$user->last_name = Input<span>::</span>get('last_name'); </span></span><span> <span>$user->email = Input<span>::</span>get('email'); </span></span><span> <span>$user->password = Hash<span>::</span>make(Input<span>::</span>get('password')); </span></span><span> </span><span> <span>if($user->save()) </span></span><span> <span>{ </span></span><span> <span>$status = 1; </span></span><span> <span>} </span></span><span> <span>else </span></span><span> <span>{ </span></span><span> <span>$status = 0; </span></span><span> <span>} </span></span><span> </span><span> <span>return Redirect<span>::</span>to('user/signup')->with('status', $status); </span></span><span> <span>}</span></span>
.
Die Frage ist jetzt: Was werden wir in unserem Controller schreiben?schauen wir es uns an:
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Auth\UserTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\UserInterface</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>; </span></span><span> </span><span> <span>class User extends <span>\LaravelBook\Ardent\Ardent</span> implements UserInterface, RemindableInterface { </span></span><span> </span><span> <span>public static $rules = array( </span></span><span> <span>'first_name' => 'required', </span></span><span> <span>'last_name' => 'required', </span></span><span> <span>'email' => 'required|email|unique:users', </span></span><span> <span>'password' => 'required|min:8' </span></span><span> <span>); </span></span><span> </span><span> <span>public static $customMessages = array( </span></span><span> <span>'first_name.required' => 'First name is required.', </span></span><span> <span>'last_name.required' => 'Last name is required.', </span></span><span> <span>'email.required' => 'Email is required.', </span></span><span> <span>'password.required' => 'Password is required.', </span></span><span> </span><span> <span>'email.email' => 'Use a real email address!', </span></span><span> <span>'email.unique' => 'This email address already exists!', </span></span><span> <span>'password.min' => 'Password must be at least 8 character long.' </span></span><span> <span>); </span></span><span> </span><span> <span>use UserTrait, RemindableTrait; </span></span><span> </span><span> <span>/** </span></span><span><span> * The database table used by the model. </span></span><span><span> * </span></span><span><span> * <span>@var <span>string</span> </span></span></span><span><span> */ </span></span><span> <span>protected $table = 'users'; </span></span><span> </span><span> <span>/** </span></span><span><span> * The attributes excluded from the model's JSON form. </span></span><span><span> * </span></span><span><span> * <span>@var <span>array</span> </span></span></span><span><span> */ </span></span><span> <span>protected $hidden = array('password', 'remember_token'); </span></span><span> </span><span> <span>public function tasks() </span></span><span> <span>{ </span></span><span> <span>return $this->hasMany('Task'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Wenn Sie es jedoch bevorzugen, können Sie auch die Eigenschaft $ user-> validationErrors verwenden. In diesem Fall oder wenn Sie feldspezifische Fehler abrufen möchten, verwenden Sie einfach $ user-> validationErrors-> get ('field_name').
Nun ist es sehr wahrscheinlich, dass Sie denken: „OK, aber was ist der wahre Vorteil, über weniger Codezeilen?“
Beginnen wir mit den wichtigsten: Bessere Code -Organisation bedeutet eine bessere Projektwartbarkeit. In einfachen Anwendungen können Sie dies nicht als Priorität empfinden, aber wenn es um größere Projekte geht, können die Dinge mit einer einzigen falschen Entscheidung leicht durcheinander gebracht werden. Lassen Sie mich ein Beispiel für eine reale Situation machen. Wir haben unsere fantastische To-Do-List-Anwendung entwickelt und sie wächst sehr schnell. Wir brauchen definitiv eine erholsame API für die mobile Anwendung. Wenn Sie den Controller auf „normale“ Weise verwenden, bedeutet dies eine weitere Anmelderoutine für die API. Zwei verschiedene Blöcke mit dem gleichen Code! Das ist nicht gut. Wo ist das gute alte trockene Prinzip (nicht wiederholen)?
Die beste Praxis wäre also eine Anmelde () -Methode in das Modell, das alles umgeht. Die Verwendung von leidenschaftlich bedeutet wirklich alles: Von der Validierung bis zum Speichernverfahren. Ohne sie konnten wir die erste Phase nicht erreichen.
Ein zweiter Vorteil ist praktischer: Modellautomatikhydrat. Lassen Sie es uns gemeinsam entdecken.
unsere postsignUp () -Methode zählt genau dreizehn Codezeilen. Auch wenn es schwierig erscheint, kann Ardent diese Zahl weiter senken. Schauen Sie sich dieses Beispiel an:
php artisan migrate:make todo_setup
Keine Fehler hier. Sie verstehen wahrscheinlich schon, was passiert ist.
arrdent verfügt über eine Modell-Autohydrat-Funktion. Dies bedeutet, dass jedes Feld automatisch mit den Eingabefieldaten ausgefüllt wird, wenn Sie das Objekt erstellen und die Methode $ user-> save () aufrufen. Natürlich müssen Sie in jedem Feld entsprechend den richtigen Namen geben.
Dieser Code:
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Database\Schema\Blueprint</span>; </span></span><span> <span>use Illuminate<span>\Database\Migrations\Migration</span>; </span></span><span> </span><span> <span>class TodoSetup extends Migration { </span></span><span> </span><span> <span>/** </span></span><span><span> * Run the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function up() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>create('users', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id')->unsigned(); </span></span><span> </span><span> <span>$table->string('first_name'); </span></span><span> <span>$table->string('last_name'); </span></span><span> <span>$table->string('email'); </span></span><span> <span>$table->string('password', 60); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> <span>}); </span></span><span> </span><span> <span>Schema<span>::</span>create('tasks', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id'); </span></span><span> </span><span> <span>$table->string('name'); </span></span><span> <span>$table->boolean('status'); </span></span><span> </span><span> <span>$table->integer('user_id')->unsigned(); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> </span><span> <span>$table->index('user_id'); </span></span><span> <span>}); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Reverse the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function down() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>dropIfExists('users'); </span></span><span> <span>Schema<span>::</span>dropIfExists('tasks'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
hat den gleichen Effekt wie
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Auth\UserTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\UserInterface</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>; </span></span><span> </span><span> <span>class User extends Eloquent implements UserInterface, RemindableInterface { </span></span><span> </span><span> <span>use UserTrait, RemindableTrait; </span></span><span> </span><span> <span>/** </span></span><span><span> * The database table used by the model. </span></span><span><span> * </span></span><span><span> * <span>@var <span>string</span> </span></span></span><span><span> */ </span></span><span> <span>protected $table = 'users'; </span></span><span> </span><span> <span>/** </span></span><span><span> * The attributes excluded from the model's JSON form. </span></span><span><span> * </span></span><span><span> * <span>@var <span>array</span> </span></span></span><span><span> */ </span></span><span> <span>protected $hidden = array('password', 'remember_token'); </span></span><span> </span><span> <span>public function tasks() </span></span><span> <span>{ </span></span><span> <span>return $this->hasMany('Task'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Von dreiTheenen sind wir gerade für ein ganzes Anmeldeverfahren auf sieben gegangen.
Um diese Funktion zu verwenden, müssen Sie sie aktivieren. Wechseln Sie einfach den $ AutohydrateEntityFrominput in Ihrem Modell auf wahr, wie folgt:
<span><span><?php </span></span><span> </span><span> <span>class Task extends <span>\Eloquent</span> { </span></span><span> <span>protected $fillable = []; </span></span><span> </span><span> <span>public function user() </span></span><span> <span>{ </span></span><span> <span>return $this->belongsTo('User'); </span></span><span> <span>} </span></span><span> <span>}</span></span>
fertig!
Sie haben auch oft einige redundante Daten, die Sie für die Geschäftslogik nicht benötigen. Denken Sie an _ Confirmationsfelder oder die CSRF -Token. Nun, wir können sie mit dem $ autopurgeredundantattributes -Eigentum des Modells verwerfen. Schalten Sie es nach wie vor auf true.
<span>{ </span> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
Jetzt ist die Prozedur sauberer als zuvor.
Ein weiteres, erwähnenswertes Merkmal ist die Einführung von Modellhaken. Sie sind im Wesentlichen eine Liste von Methoden, die, wenn sie implementiert werden, in bestimmten Ausführungsmomenten aufgerufen werden. Um ein Beispiel zu erstellen, wird die Methode AfterUpdate () vor jedem Update () -Anruf aufgerufen. Die Methode vorbevalidat () wird vor jeder Validierung aufgerufen, usw.
Hier ist eine Liste all dieser Methoden:
Ein klassisches Beispiel könnte eine Datenausarbeitung vor dem Speicherverfahren sein. So wie folgt:
php artisan migrate:make todo_setup
Jede "Vorher" -Methode hat einen booleschen Rückgabewert. Wenn wahr, wird die folgende Operation normal ausgeführt. Wenn die Methode false zurückgibt, wird die Operation gestoppt. In der obigen Methode haben wir eine Schnecke (und füllten das richtige Feld) mit der Methode Beforesave () direkt nach der Validierung erzeugt.
Es gibt auch einen bestimmten Tipp über Beforesave () und Aftersave (): Sie können sie zur Laufzeit deklarieren. Schauen Sie:
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Database\Schema\Blueprint</span>; </span></span><span> <span>use Illuminate<span>\Database\Migrations\Migration</span>; </span></span><span> </span><span> <span>class TodoSetup extends Migration { </span></span><span> </span><span> <span>/** </span></span><span><span> * Run the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function up() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>create('users', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id')->unsigned(); </span></span><span> </span><span> <span>$table->string('first_name'); </span></span><span> <span>$table->string('last_name'); </span></span><span> <span>$table->string('email'); </span></span><span> <span>$table->string('password', 60); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> <span>}); </span></span><span> </span><span> <span>Schema<span>::</span>create('tasks', function(Blueprint $table) </span></span><span> <span>{ </span></span><span> <span>$table->increments('id'); </span></span><span> </span><span> <span>$table->string('name'); </span></span><span> <span>$table->boolean('status'); </span></span><span> </span><span> <span>$table->integer('user_id')->unsigned(); </span></span><span> </span><span> <span>$table->timestamps(); </span></span><span> </span><span> <span>$table->index('user_id'); </span></span><span> <span>}); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Reverse the migrations. </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>public function down() </span></span><span> <span>{ </span></span><span> <span>Schema<span>::</span>dropIfExists('users'); </span></span><span> <span>Schema<span>::</span>dropIfExists('tasks'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
Überlegen wir uns über einige mögliche Verwendungen dieser Methoden in unserer Anwendung.
Vielleicht ein Beforesave (), um mit Passwort zu handeln?
<span><span><?php </span></span><span> </span><span> <span>use Illuminate<span>\Auth\UserTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\UserInterface</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>; </span></span><span> <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>; </span></span><span> </span><span> <span>class User extends Eloquent implements UserInterface, RemindableInterface { </span></span><span> </span><span> <span>use UserTrait, RemindableTrait; </span></span><span> </span><span> <span>/** </span></span><span><span> * The database table used by the model. </span></span><span><span> * </span></span><span><span> * <span>@var <span>string</span> </span></span></span><span><span> */ </span></span><span> <span>protected $table = 'users'; </span></span><span> </span><span> <span>/** </span></span><span><span> * The attributes excluded from the model's JSON form. </span></span><span><span> * </span></span><span><span> * <span>@var <span>array</span> </span></span></span><span><span> */ </span></span><span> <span>protected $hidden = array('password', 'remember_token'); </span></span><span> </span><span> <span>public function tasks() </span></span><span> <span>{ </span></span><span> <span>return $this->hasMany('Task'); </span></span><span> <span>} </span></span><span> </span><span> <span>}</span></span>
oder ein Reinigungshaken kurz vor der Löschung der Benutzer?
<span><span><?php </span></span><span> </span><span> <span>class Task extends <span>\Eloquent</span> { </span></span><span> <span>protected $fillable = []; </span></span><span> </span><span> <span>public function user() </span></span><span> <span>{ </span></span><span> <span>return $this->belongsTo('User'); </span></span><span> <span>} </span></span><span> <span>}</span></span>
Es gibt viele Möglichkeiten.
Mit leidenschaftlich können Sie auch Beziehungen auf kürzere Weise definieren als zuvor. Lassen Sie uns sehen, wie wir unsere Beziehungen zwischen Modellen tatsächlich definieren: Das folgende Beispiel zeigt die Methode der Aufgaben () im Benutzermodell.
<span>{ </span> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
Verwenden von Ardent zum Definieren von Beziehungen bedeutet, ein einfaches Array zu definieren, das als $ relationsData bezeichnet wird.
<span><span><?php </span></span><span> <span>class User extends <span>\LaravelBook\Ardent\Ardent</span> { </span></span><span> <span>// model code here! </span></span><span> <span>}</span></span>
Dies hat genau den gleichen Effekt. Leiden verwendet die gleiche Namenskonvention, um Namen und Methoden zu binden, ohne sie einzeln schreiben zu müssen.
Es gibt jedoch viele Anpassungen, die Sie durchführen können:
<span><span><?php </span></span><span> </span><span> <span>public function postSignup() </span></span><span> <span>{ </span></span><span> <span>$rules = array( </span></span><span> <span>'first_name' => 'required', </span></span><span> <span>'last_name' => 'required', </span></span><span> <span>'email' => 'required|email|unique:users', </span></span><span> <span>'password' => 'required|min:8' </span></span><span> <span>); </span></span><span> </span><span> <span>$messages = array( </span></span><span> <span>'first_name.required' => 'First name is required.', </span></span><span> <span>'last_name.required' => 'Last name is required.', </span></span><span> <span>'email.required' => 'Email is required.', </span></span><span> <span>'password.required' => 'Password is required.', </span></span><span> </span><span> <span>'email.email' => 'Use a real email address!', </span></span><span> <span>'email.unique' => 'This email address already exists!', </span></span><span> <span>'password.min' => 'Password must be at least 8 character long.' </span></span><span> <span>); </span></span><span> </span><span> <span>$validator = Validator<span>::</span>make(Input<span>::</span>all(), $rules, $messages); </span></span><span> </span><span> <span>if($validator->fails()) </span></span><span> <span>{ </span></span><span> <span>return Redirect<span>::</span>to('user/signup')->with('errors', $validator->messages()); </span></span><span> <span>} </span></span><span> </span><span> <span>$user = new User; </span></span><span> </span><span> <span>$user->first_name = Input<span>::</span>get('first_name'); </span></span><span> <span>$user->last_name = Input<span>::</span>get('last_name'); </span></span><span> <span>$user->email = Input<span>::</span>get('email'); </span></span><span> <span>$user->password = Hash<span>::</span>make(Input<span>::</span>get('password')); </span></span><span> </span><span> <span>if($user->save()) </span></span><span> <span>{ </span></span><span> <span>$status = 1; </span></span><span> <span>} </span></span><span> <span>else </span></span><span> <span>{ </span></span><span> <span>$status = 0; </span></span><span> <span>} </span></span><span> </span><span> <span>return Redirect<span>::</span>to('user/signup')->with('status', $status); </span></span><span> <span>}</span></span>
Jedes Element in $ relationsData hat einen Schlüssel (ja, den Methodennamen der Beziehung) und ein Array mit einigen Parametern.
Ich empfehle es auf jeden Fall. Tust du? Hast du es ausprobiert? Lassen Sie uns in den Kommentaren unten wissen!
Was ist der Zweck der BOOT () -Methode in Laravel eloquent? () Methode in Laravel Eloquent ist ein Lebenszyklushaken, der aufgerufen wird, wenn das Modell „gestoot“ ist, d. H. In den Speicher geladen wird. Sie können diese Methode in Ihrem Modell überschreiben, um ein Verhalten hinzuzufügen, das auftreten sollte, wenn das Modell gestartet wird, z. B. die Registrierung von Ereignishörern oder das Anpassen der Konfiguration des Modells.
Das obige ist der detaillierte Inhalt vonLaSent: Laravel -Modelle auf Steroiden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!