ホームページ  >  記事  >  バックエンド開発  >  Laravel でのモデル検証の使用例

Laravel でのモデル検証の使用例

黄舟
黄舟オリジナル
2017-10-26 10:33:272132ブラウズ

前書き

この記事では主に、Laravel 学習におけるモデル検証の使用に関する関連コンテンツを紹介し、参考と学習のために共有します。以下では多くを述べません。詳細を見てみましょう。導入。

データベースに書き込む前に、各モデル列の定義を型チェックするなど、データを検証する必要があります ('type' この列は enum('card','loan') である必要があります) コード>、ここではモデルイベントが使用されます。 <code>enum('card','loan')) ,这里使用model event来做。

在EventServiceProvider(或自定义一个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[&#39;events&#39;]->listen(&#39;eloquent.saving: *&#39;, function (string $event_name, array $data): void {
   /** @var \App\Extensions\Illuminate\Database\Eloquent\Model $object */
   $object = $data[0];
   
   $object->validate();
  });
}

'eloquent.saving: *'

EventServiceProvider に書き込みます (または ValidationServiceProvider をカスタマイズします):

// \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);
 } 
}

'eloquent. Saving: *' は、リッスンされたすべてのモデル、つまり This を保存することを意味しますイベントはモデルの書き込み操作によってトリガーされます。

次に、EloquentModelを拡張する抽象モデルを作成します:

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;,
 ];
}


このようにして、抽象モデルを継承する各サブクラスで、次のようにconst COLUMN_TYPE_RULESを定義するだけです:

りー 記述するときは、データベースとの無効な衝突を避けるために、事前に各モデルのスキーマ定義を型チェックしてください。この機能の目的は、入力データのフィールド定義がモデル スキーマから正当であるかどうかを検証することです。

🎜🎜さらに、一般に、タイプチェックスキーマ定義に加えて、ビジネスニーズに従って論理検証サニティチェック制約ルールを実行する必要があります。たとえば、アカウントを作成する場合、入力のフィールド person_id を子にすることはできません。 、など。ここでのビジネスは異なり、制約ルールも異なるため、詳しい説明は省略します。この機能の目的は主に、入力データの正当性を論理的に検証することです。 🎜🎜 つまり、通常の状況では、無効なヒット データベースを避けるために、データベースに書き込む前にモデルの検証を行う必要があります。 🎜🎜🎜🎜概要🎜🎜🎜

以上がLaravel でのモデル検証の使用例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。