L'une des (quelques) choses que je n'aime pas chez Laravel est que vous ne pouvez pas déplacer facilement le code de validation de votre contrôleur vers vos modèles. Lorsque j'écris un logiciel, j'aime appliquer le principe «Fat Modèles, contrôleurs maigres». Donc, pour moi, écrire le code de validation dans le contrôleur n'est pas une bonne chose.
Pour résoudre ce problème, je voudrais présenter Ardent, un excellent package pour Laravel 4. Pour être plus précis, Ardent se présente comme «des modèles intelligents auto-validants pour l'ORM éloquent de Laravel Framework 4». En d'autres termes: exactement ce dont nous avons besoin!
Comme vous pouvez l'imaginer, c'est une extension de la classe de modèle éloquente, en gros. Ce package est livré avec de nouvelles fonctionnalités, utilitaires et méthodes dédiés à la validation des entrées et à d'autres petites choses.
Pour une meilleure compréhension des avantages que vous pouvez apprécier tout en utilisant Ardent, nous allons mettre en place une petite application de test. Rien de compliqué: une simple application de liste de tâches.
Bien sûr, je ne vais pas implémenter une application complète: je veux juste expliquer certains principes, donc je ferai des contrôleurs et des modèles - pas de vues. Après cela, je vais «traduire» le code en utilisant Ardent.
Notre liste de tâches comptera deux entités différentes:
utilisateur
tâche
un projet vraiment basique. Cependant, si vous ne voulez pas écrire de code, ne vous inquiétez pas: j'ai déjà préparé une migration que vous pouvez utiliser pour générer la base de données. Utilisez-le!
Créez le fichier de migration avec la commande
php artisan migrate:make todo_setup
puis remplissez le fichier avec ce code:
php artisan migrate:make todo_setup
Maintenant, nous avons nos tables. Il est temps de créer nos modèles. Même ici, nous avons très peu de lignes à écrire. Voici le modèle utilisateur (c'est aussi le par défaut).
<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>
Je viens d'ajouter la méthode des tâches pour décrire la relation avec le modèle de tâche.
<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>
Nous venons de faire notre point de départ. À partir de maintenant, juste après l'installation, nous verrons deux situations différentes: d'abord, la version «normale» du code sans ardent. Juste après cela, nous ferons une comparaison avec la version «améliorée». Vous remarquerez la différence, croyez-moi.
Commençons!
L'installation d'ardente est très facile avec le compositeur. Ajoutez simplement la dépendance au fichier composer.json de votre projet.
<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>
Ensuite, après la mise à jour, il vous suffit d'étendre la classe ardente dans vos modèles comme SO:
<span>{ </span> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
… et vous êtes prêt à partir!
La première chose à faire est d'analyser à quel point Ardent facilite notre vie en mettant la validation. Nous savons déjà comment le faire avec Laravel. Faisons un exemple classique: la méthode du post qui gérera les données provenant du formulaire.
Dans une situation «normale», nous ferions quelque chose comme ceci:
<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>
… qu'en est-il avec Ardent?
avec ardent, les choses changent un peu. Tout d'abord, comme vous pouvez facilement l'imaginer, les règles de validation seront déplacées directement dans le modèle: c'est ici que nous commencerons notre «Restyle». Alors, ouvrez le fichier du modèle et modifiez-le comme:
<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>
Que s'est-il passé? Pas grand-chose: nous avons changé la classe de base de notre modèle (de l'éloquente à ardent) et nous avons déménagé (en utilisant la même syntaxe, juste une copie) les règles de validation ici, avec les messages d'erreur personnalisés.
Donc, la question est maintenant: qu'allons-nous écrire dans notre contrôleur?
Vérifions-le:
<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>
Plus d'instructions de validation ici. Ils ont tous disparu. Ce n'est pas seulement un "déménagement", cependant: la méthode $ user-> sauve (), maintenant, reviendra faux s'il y a des problèmes dans la phase de validation. Ensuite, vous pourrez récupérer les erreurs avec la méthode $ user-> errors () -> all (). Pas de classes étranges: l'objet retourné sera un sac de message classique que vous avez peut-être déjà rencontré en travaillant avec Laravel.
Si vous préférez, cependant, vous pouvez également utiliser la propriété $ user-> ValidationErrors. Dans ce cas, ou si vous souhaitez récupérer les erreurs spécifiques au champ, utilisez simplement $ user-> validationerrors-> get ('field_name').
Maintenant, il est très probable que vous pensiez "OK, mais quel est le véritable avantage, au-delà de moins de lignes de code?"
Commençons par les plus importants: une meilleure organisation de code signifie une meilleure maintenabilité du projet. Dans des applications simples, vous ne pouvez pas le ressentir comme une priorité, mais en ce qui concerne les projets plus importants, les choses peuvent être facilement gâchées avec une seule mauvaise décision. Permettez-moi de faire un exemple de situation du monde réel. Nous avons développé notre impressionnante liste de listes de tâches, et elle se développe très rapidement. Nous avons certainement besoin d'une API RESTful pour l'application mobile. L'utilisation du contrôleur de la manière «normale» signifiera écrire une autre routine d'inscription pour l'API. Deux blocs différents avec le même code! Ce n'est pas bon. Où est le bon vieux principe sec (ne vous répétez pas)?
Ainsi, la meilleure pratique serait d'écrire une méthode d'inscription () dans le modèle qui gère tout. Utiliser Ardent signifie gérer vraiment tout: de la validation à la procédure de sauvegarde. Sans cela, nous n'avons pas pu accomplir la première phase.
Un deuxième avantage est plus pratique: modèle auto-hydraté. Découvrons-le ensemble.
Notre méthode postsignup () compte exactement treize lignes de code. Même si cela semble difficile, Ardent peut réduire ce nombre davantage. Jetez un œil à cet exemple:
php artisan migrate:make todo_setup
pas d'erreurs ici. Vous comprenez probablement déjà ce qui s'est passé.
Ardent a une fonctionnalité d'hydrate automatique modèle. Cela signifie que lorsque vous créez l'objet et appelez la méthode $ user-> sauver (), chaque champ est rempli automatiquement avec les données d'objet d'entrée. Bien sûr, vous devrez donner le bon nom dans chaque champ de formulaire en conséquence.
donc, ce 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>
aura le même effet que
<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>
À partir de Tretheen Lines, nous sommes descendus à sept pour une procédure d'inscription entière.
Pour utiliser cette fonctionnalité, vous devrez l'activer. Il suffit de changer la $ Autohydrateentityfroput dans votre modèle à True, comme ceci:
<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>
fait!
Vous aurez également souvent des données redondantes dont vous n'aurez pas besoin pour la logique métier. Pensez aux champs _confirmation ou aux jetons CSRF. Eh bien, nous pouvons les jeter avec la propriété $ AutopurgeredUndantAttributes du modèle. Comme précédemment, basculez-le simplement sur true.
<span>{ </span> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
Maintenant, la procédure est plus propre qu'auparavant.
Une autre bonne fonctionnalité à mentionner est l'introduction de crochets modèles. Ce sont essentiellement une liste de méthodes qui, si elles sont mises en œuvre, sont appelées dans certains moments d'exécution. Ainsi, pour faire un exemple, la méthode AfterUpdate () sera appelée avant chaque appel à mise à jour (). La méthode avant-validate () sera appelée avant chaque validation, etc.
Voici une liste de toutes ces méthodes:Un exemple classique pourrait être une élaboration de données avant la procédure de sauvegarde. Comme ceci:
php artisan migrate:make todo_setup
Chaque méthode «avant» a une valeur de retour booléenne. Si cela est vrai, l'opération suivante est exécutée normalement. Si la méthode retourne fausse, l'opération va être arrêtée. Dans la méthode ci-dessus, nous avons généré une limace (et rempli le champ approprié) avec la méthode beforesave (), juste après la validation.
Il y a aussi une astuce spécifique sur Beforesave () et AfterSave (): vous pouvez les déclarer au moment de l'exécution. Regardez:
<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>
Réfléchissons à quelques utilisations possibles de ces méthodes dans notre application.
peut-être un beforesave () pour gérer le hachage du mot de passe?
<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>
ou un crochet de nettoyage juste avant la suppression de l'utilisateur?
<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>
Il existe de nombreuses possibilités.
avec ardent, vous pouvez également définir des relations de manière plus courte qu'auparavant. Voyons comment nous définissons réellement nos relations entre les modèles: l'exemple suivant montre la méthode tâches () dans le modèle utilisateur.
<span>{ </span> <span>"require": { </span> <span>"laravelbook/ardent": "2.*" </span> <span>} </span> <span>}</span>
Utiliser Ardent pour définir des relations signifie définir un tableau simple, appelé $ RelationsData.
<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>
Cela a exactement le même effet. Ardent utilise la même convention de dénomination pour lier les noms et les méthodes, sans avoir à les écrire un par un.
Cependant, il existe de nombreuses personnalisations que vous pouvez faire:
<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>
Chaque élément de $ RelationsData a une clé (oui, le nom de la méthode de la relation) et un tableau avec certains paramètres.
Avec un grand paquet d'avantages (également 126k téléchargements et mises à jour fréquentes), il est très difficile de trouver une raison de ne pas utiliser Ardent dans votre prochaine application. Il convient à tous les types de projets, et étant une extension du modèle d'Eloquent, il obtient une compatibilité complète avec les projets Laravel.
Je le recommande vraiment. Est-ce que tu? L'avez-vous essayé? Faites-nous savoir dans les commentaires ci-dessous!
Laravel Eloquent a évolué de manière significative de la version 4.2 à 10.x. Dans Laravel 4.2, Eloquent était un simple ORM (cartographie relationnelle d'objet) avec les opérations de CRUD de base. Laravel 5.0 a introduit de nouvelles fonctionnalités telles que plusieurs connexions, des suppressions souples et la manipulation des événements. Laravel 7.x a apporté un chargement impatient, une sérialisation du modèle et des ressources API. Laravel 10.x a encore amélioré éloquent avec des performances améliorées, une meilleure gestion des erreurs et des fonctionnalités avancées telles que les opérations par lots et les usines de modèles.
Ardent est un ensemble qui est un ensemble qui est un ensemble qui Ajoute un modèle éloquent intelligent auto-validant à Laravel. Il fournit une validation automatique des attributs avant d'être enregistrés, ce qui réduit la quantité de code de validation que vous devez écrire dans vos contrôleurs. Ardent prend également en charge la sauvegarde de modèles et leurs relations, qui simplifie les opérations de sauvegarde complexes.
Dans Laravel Eloquent, vous pouvez utiliser plusieurs Connexions de base de données en les définissant dans votre fichier config / database.php. Ensuite, dans votre modèle éloquent, vous pouvez spécifier la connexion à utiliser avec la propriété Connexion $. Par exemple, protégé $ connection = 'mysql2'; utiliserait la connexion «mysql2».
Le chargement impatient est une méthode de chargement des données connexes dans une seule requête de base de données, plutôt que des requêtes multiples. Cela peut améliorer considérablement les performances lorsque vous travaillez avec de grands ensembles de données. Vous pouvez utiliser la méthode avec () en éloquente pour spécifier quelles relations à la charge avide.
Les suppressions douces dans Laravel Eloquent vous permettent de «supprimer «Un enregistrement sans le retirer de la base de données. Au lieu de cela, un horodat supprimé est défini. Vous pouvez activer les suppressions soft dans un modèle éloquent en utilisant le trait Softdeletes et en ajoutant une colonne supprimée à votre table.
Les usines de modèle à Laravel Eloquent sont un Laravel Eloquent?
moyen pratique de générer de nouvelles instances de modèle pour tester ou entretenir votre base de données. Vous pouvez définir une usine de modèles qui spécifie les valeurs d'attribut par défaut pour votre modèle, puis utiliser l'usine pour créer de nouvelles instances avec ces valeurs par défaut.
Comment ardent gère les enregistrements de la transaction imbriqués? Ardent fournit une méthode SaveneSée () qui enregistre un modèle et tous ses modèles connexes dans une seule transaction de base de données. Cela garantit que tous les sauvegardes réussissent, soit aucun, conservant l'intégrité de vos données.Les ressources API dans Laravel Eloquent vous permettent de transformer vos modèles et les collections de modèles en format JSON pour une utilisation dans une API. Vous pouvez créer une classe de ressources qui définit comment le modèle doit être transformé, puis renvoyer les instances de cette classe de ressources à partir de vos routes API.
Quel est le but de la méthode de démarrage () dans Laravel Eloquent?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!