在 Laravel 5 中,使用表单请求作为验证门,并给出以下代码:
控制器
public function decline(Request $request, InviteDeclineRequest $validation, $id)
{
$invite = Invite::find($id);
$invite->status = 'declined';
$invite->save();
}
表单请求
class InviteDeclineRequest extends Request {
public function rules()
{
return [
# this is referring to the incoming data,
# not the existing data
'status': 'pending',
];
}
}
如何更改上述验证规则集,以说明传入输入仅在现有记录的状态设置为“待处理”时才有效。即不允许拒绝邀请,除非现有待处理。
选项 1: 将此逻辑放入控制器中。也许上述内容不被视为验证的一部分(尽管我认为它是),因此不属于 FormRequest。
方案二: 将逻辑放在FormRequest方法的Authorize方法中。唯一的缺点是授权应该用于访问控制,而不是数据验证。
选项 3: 扩展表单请求以包含验证现有数据和传入数据的第三种方法。有点痛苦,因为我需要确保它作为请求周期的一部分被调用。
选项 4: 添加自定义验证规则: http: //laravel.com/docs/5.0/validation#custom-validation-rules