Laravel Model バリデーション実装

Larave、ModelのSave時にバリデーションを実装


バリデーションの実装

\app\ValidateOnSave.phpを作成。

<?php

namespace App;

use Illuminate\Validation\ValidationException;
use Illuminate\Support\Facades\Validator;

trait ValidateOnSave
{
    protected function rules():array
    {
        return [];
    }

    public function save(array $options = [])
    {
        $rules = $this->rules();
        if (count($rules)) {
            $subject   = $this->attributes;
            $validator = Validator::make($subject, $rules);

            if ($validator->fails()) {
                throw new ValidationException($validator);
            }
        }
        return parent::save($options);
    }
}

Model\app\Sample.phpを作成しバリデーションを実装。

<?php

namespace App;

class Sample extends Model
    use ValidateOnSave;

    // バリデーションルールの記載
    protected function rules(){
        return [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ];
	}
}

実際にSampleクラスのsaveを実行してバリデーションを出してみます。。

$sample = new Sample();
$sample->save();  // バリデーションが実行されてエラーが出される

これでValidationExceptionがthrowされます。


参考

0 件のコメント :

コメントを投稿