Exemples d'utilisation de la validation de modèle dans Laravel

黄舟
Libérer: 2023-03-16 19:20:01
original
2131 Les gens l'ont consulté

Avant-propos

Cet article présente principalement le contenu pertinent sur l'utilisation de la validation de modèle dans l'apprentissage Laravel, et le partage pour votre référence et votre étude, je ne le dirai pas. beaucoup plus ci-dessous. Jetons un coup d’œil à l’introduction détaillée.

Avant d'écrire dans la base de données, vous devez valider les données, par exemple vérifier le type de la définition de chaque colonne de modèle (la colonne 'type' doit être enum('card','loan')) , utilisez ici l'événement de modèle pour le faire.

Écrivez dans EventServiceProvider (ou personnalisez un ValidationServiceProvider) :

public function boot()
{
  /**
   * Inspired by @see \Illuminate\Foundation\Providers\FormRequestServiceProvider::boot()
   *
   * Note: saving event is always triggered before creating and updating events
   */
  $this->app['events']->listen('eloquent.saving: *', function (string $event_name, array $data): void {
   /** @var \App\Extensions\Illuminate\Database\Eloquent\Model $object */
   $object = $data[0];
   
   $object->validate();
  });
}
Copier après la connexion

'eloquent.saving: *' représente la sauvegarde de l'écoute de tous les modèles, c'est-à-dire que l'opération d'écriture de n'importe quel modèle déclenchera cet événement

Ensuite, écrivez un modèle abstrait extends EloquentModel :<🎜. >

// \App\Extensions\Illuminate\Database\Eloquent\Model

use Illuminate\Database\Eloquent\Model as EloquentModel;
use Illuminate\Validation\ValidationException;

abstract class Model extends EloquentModel
{
 public function validate():void
 {
  // 1. validate type rules (type-check)
  $validator = $this->getTypeValidator();
  
  if ($validator->fails()) {
   throw new ValidationException($validator);
  }
  
  // $validator = $this->getConstraintValidator();
  // 2. validate constraint rules (sanity-check)
 }

 protected function getTypeValidator()
 {
  return $this->getValidationFactory()->make($this->attributes, static::COLUMN_TYPE_RULES);
 }
 
 protected function getValidationFactory()
 {
  return app(Factory::class);
 }
 
 protected function getConstraintValidator()
 {
  // return $this->getValidationFactory()->make($attributes, static::COLUMN_CONSTRAINT_RULES);
 } 
}
Copier après la connexion

De cette façon, dans chaque sous-classe qui hérite du modèle abstrait, définissez simplement const COLUMN_TYPE_RULES, tel que :

class Account extends Model
{
 public const COLUMN_TYPE_RULES = [
  &#39;id&#39; => &#39;integer|between:0,4294967295&#39;,
  &#39;source&#39; => &#39;nullable|in:schwab,orion,yodlee&#39;,
  &#39;type&#39; => &#39;required|in:bank,card,loan&#39;,
 ];
}
Copier après la connexion

Lors de l'écriture, vérifiez à l'avance la définition du schéma de chaque modèle pour éviter les collisions invalides avec la base de données. pour vérifier si la définition du champ des données d'entrée est légale à partir du schéma du modèle


De plus, généralement en plus de la définition du schéma de vérification de type, les règles de contrainte de vérification de l'intégrité doivent être logiquement vérifiées conformément à. besoins de l'entreprise. Par exemple, lors de la création d'un compte, le champ person_id dans les entrées ne peut pas être un enfant, etc. L'entreprise ici est différente et les règles de contrainte sont différentes. Le but de cette fonctionnalité est principalement de vérifier logiquement les données d'entrée. Légalité.

OK, en général, la validation du modèle est requise avant d'écrire dans la base de données pour éviter les hits invalides

Résumé.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!