Maison >développement back-end >tutoriel php >Exemples d'utilisation de la validation de modèle dans Laravel

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

黄舟
黄舟original
2017-10-26 10:33:272162parcourir

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();
  });
}

'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);
 } 
}

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 = [
  'id' => 'integer|between:0,4294967295',
  'source' => 'nullable|in:schwab,orion,yodlee',
  'type' => 'required|in:bank,card,loan',
 ];
}

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!

Déclaration:
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