Maison >développement back-end >tutoriel php >Exemples d'utilisation de la validation de modèle dans Laravel
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
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!