在知道验证规则需要控制器设置的变量的情况下,如何将验证逻辑放入FormRequest中?
public function store()
{
$commentable = Comment::getCommentable(request('input1'), request('input1'));
// I need this $commentable above in my validator below!
$this->validate(request(),[
'commentable_type' => 'required|string|alpha', // Post
'commentable_id' => 'required|uuid|exists:' . plural_from_model($commentable) . ',' . $commentable->getKeyName(),
'body' => 'required|string|min:1',
]);
// ...
}
这是我的实际代码:https://i.imgur.com/3bb8rgI.png
我想整理控制器的store()方法,在FormRequest中移动validate()。但是,如您所见,它需要$ commentable变量,该变量由控制器检索。
我想我可以做到这一点,以便FormRequest也可以检索该变量本身,但这将是一个丑陋的重复(因为它还会对数据库进行两次探测...)。因此,这根本不是一个好的解决方案。
有什么主意吗?干杯。
答案 0 :(得分:1)
您的FormRequest类可以通过prepareForValidation
钩子执行预验证步骤(包括添加/修改输入数据,如下所示):
protected function prepareForValidation()
{
$this->commentable = Comment::getCommentable($this->input('input1'), $this->input('input1'));
$this->merge([
'commentable_id' => $this->commentable->id,
'commentable_type' => $this->commentable->type
]);
}
您也可以在$this->commentable
函数中使用rules()
。