复杂更新验证的逻辑应该放在哪里?

时间:2019-12-16 17:20:04

标签: laravel laravel-5 model-view-controller crud

我正在与我的团队讨论并使用Laravel框架。

验证作为关系的现有模型属性的更新需要几次数据库调用,以确保它适合约束。

我的第一个想法是创建一个自定义验证器,但是,这将需要在验证器中进行查询。一个用于获取要更新的模型,一个用于获取存在的关系,另一个用于获取将要更新的关系。该验证器也将仅用于更新该模型上的该属性。

或者,可以通过事件来验证,但是我不确定保留该验证逻辑的最佳位置。

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

Laravel的自定义验证规则就是为此而制定的

use Illuminate\Validation\Rule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::exists('staff')->where(function ($query) {
            $query->where('account_id', 1);
        }),
    ],
]);

您可以对查询进行任何约束,只要返回至少1条记录,查询就会通过

答案 1 :(得分:0)

编辑表单验证放置名称空间App \ Http \ Requests \ Post;     

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

                    You are logged in!
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

然后进入控制器

namespace App\Http\Requests\Post;

use Illuminate\Foundation\Http\FormRequest;

class EditFormValidation extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => 'required | max:150 | unique:posts,title,'.$this->request->get('id'),
            'description' => 'required'
        ];
    }

    public function messages()
    {
        return [
            'title.required' => 'This filed is required.',
        ];
    }
}