Laravel - 更新日期的验证规则

lew*_*s4u 2 laravel

我有这个验证规则:

'event_start' => 'required|date|after:today',
Run Code Online (Sandbox Code Playgroud)

并且在创建模型时一切都很好,这个日期不能在今天之前....

但是当用户尝试更新事件时,开始日期是在今天之前,并且弹出验证错误....有没有办法调整此更新模型?因此,当用户更新此规则时,仅检查它是否为日期?

UPDATE

这是我对创建和更新的唯一验证检查:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

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

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        $rules = [

            'title' => 'required|min:2|max:255',
            'event_start' => 'required|date|after:today',

        ];

        return $rules;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ean 6

您应该有不同的表单请求类来创建和更新事件.但这并不是说你不能使用继承.

如果您的更新方法与create方法略有不同,那么您可以扩展该方法的表单请求并修改更新规则:

class CreateEventRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'name' => 'required|unique:events',
            'start_date' => 'required|date|after:today',
            'door_time' => 'required|date_format:"H:i:s",
            'location' => 'required',
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

和…

class UpdateEventRequest extends CreateEventRequest
{
    public function rules()
    {
        // Get ID of event if using route–model binding
        $id = $this->route('event')->getKey();

        // Use array merge to override create event form request’s rules
        return array_merge(parent::rules(), [
            'name' => 'required|unique:events,name,'.$id,
            'start_date' => 'required|date',
        ]);
    }
}
Run Code Online (Sandbox Code Playgroud)

你甚至可以推动规则的方法来一个抽象类,并让您创建和更新表单请求类扩展那个类:

abstract class EventFormRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        // Base event rules
    }
}

class CreateEventRequest extends EventFormRequest
{
    public function rules()
    {
        // Create-specific rules
    }
}

class UpdateEventRequest extends EventFormRequest
{
    public function rules()
    {
        // Update-specific rules
    }
}
Run Code Online (Sandbox Code Playgroud)