我正在寻找一种方法来验证一些逻辑之前的formRequest验证,但我找不到任何东西。它是否在withValidator
方法或构造函数中有类似于after()
的钩子?
MyController:
class MyController extends Controller {
public function myMethod(MyFormRequest $request) {
//the request is validate before executing anything here
}
}
MyFormRequest:
class MyFormRequest extends FormRequest
{
protected $stopOnFirstFailure = true;
public function rules(): array
{
return [
'name' => 'integer',
//etc
];
}
public function withValidator(Validator $validator): void
{
if ($this->request->model()->someValue < 100) {
//throw validation error before the validation of the above rules
}
}
}
我不能把验证放在正常的rules
集合中,因为我没有这个属性在请求数据中,特定的验证是在请求的模型上,它与会话相关(比如用户模型),我需要在其他任何事情之前首先检查,但我也不能把它放在authorization
方法或中间件中,因为它不是一个验证检查。我总是可以将它添加到prepareForValidation
中,但是这样我就在validatedData中有了一个属性,我在流中不需要它。..
1条答案
按热度按时间qvtsj1bj1#
**建议1:**由于您没有验证表单输入,请考虑将这部分验证转移到其他地方。中间件可能是一个很好的候选者。
**建议二:**如果你想把这个逻辑放在一个地方,试着重写下面的方法之一(不确定你需要哪一个):
validate
、validateWithBag
、validateResolved
。您将执行以下操作:这种方法的一个潜在缺点是,您的自定义验证将在
authorize
或prepareForValidation
之前进行。