我有这个验证规则:
'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)
您应该有不同的表单请求类来创建和更新事件.但这并不是说你不能使用继承.
如果您的更新方法与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)