>  기사  >  백엔드 개발  >  Laravel에서 모델 검증을 사용하는 예

Laravel에서 모델 검증을 사용하는 예

黄舟
黄舟원래의
2017-10-26 10:33:272155검색

머리말

이 글은 라라벨 학습에서 모델 검증 활용에 대한 관련 내용을 주로 소개하고 참고 및 학습을 위해 공유합니다. 아래에서는 자세한 내용을 살펴보겠습니다. 소개.

데이터베이스에 쓰기 전에 각 모델 열의 정의를 유형 확인하는 등 데이터를 확인해야 합니다('유형' 이 열은 enum('card','loan')이어야 함) code>, 모델 이벤트가 여기에 사용됩니다. <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: *'는 청취된 모든 모델의 저장을 의미합니다. 이벤트는 모델의 쓰기 작업에 의해 트리거됩니다.

그런 다음 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를 정의하면 됩니다.

rreee

작성 시 각 모델의 스키마 정의를 미리 확인하여 데이터베이스와의 잘못된 충돌을 방지하세요. 이 기능의 목적은 입력 데이터의 필드 정의가 모델 스키마에서 유효한지 여부를 확인하는 것입니다. 또한 일반적으로 유형 확인 스키마 정의 외에도 비즈니스 요구에 따라 논리적 확인 온전성 확인 제약 조건 규칙을 수행해야 합니다. 예를 들어 계정을 생성할 때 입력의 person_id 필드는 하위일 수 없습니다. , 등. . 여기서는 사업이 다르고 제약 조건 규칙이 다르기 때문에 너무 많이 설명하지 않겠습니다. 이 기능의 목적은 주로 입력 데이터의 적법성을 논리적으로 검증하는 것입니다.

간단히 말하면, 일반적인 상황에서는 잘못된 히트 DB를 피하기 위해 데이터베이스에 쓰기 전에 모델 검증을 수행해야 합니다. 🎜🎜🎜🎜요약🎜🎜🎜

위 내용은 Laravel에서 모델 검증을 사용하는 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.