带变量的Laravel FormRequest

带变量的Laravel FormRequest,laravel,validation,Laravel,Validation,知道验证规则需要控制器设置的变量,如何将验证逻辑放入FormRequest中 公共函数存储() { $commentable=Comment::getCommentable(请求('input1')、请求('input1'); //我需要这个$commentable在我的验证器上面下面! $this->validate(请求()[ 'commentable_type'=>'required | string | alpha',//Post 'commentable_id'=>'必需的| uuid

知道验证规则需要控制器设置的变量,如何将验证逻辑放入FormRequest中

公共函数存储()
{
$commentable=Comment::getCommentable(请求('input1')、请求('input1');
//我需要这个$commentable在我的验证器上面下面!
$this->validate(请求()[
'commentable_type'=>'required | string | alpha',//Post
'commentable_id'=>'必需的| uuid |存在:'.mulral_from_model($commentable)。','.$commentable->getKeyName(),
'body'=>'必需|字符串|最小值:1',
]);
// ...
}
这是我的实际代码:

我想整理一下控制器的store()方法,在FormRequest中移动validate()。但是,正如您所看到的,它需要$commentable变量,该变量由控制器检索

我想我可以这样做,FormRequest也可以检索该变量本身,但这将是一个难看的重复(因为它还将探测数据库两次…)。因此,这根本不是一个好的解决方案


有什么想法吗?干杯。

您的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
    ]);
}

您也可以在
rules()
函数中使用
$this->commentable

我可以在prepareForValidation()方法中返回一个响应,以便在getCommentable()引发异常时有点“中止”吗?我的IDE抱怨不总是有“return”语句@13h50我不认为返回响应会起任何作用,但您可以
返回以帮助IDE解决问题。
getCommentable
中的异常应该浮动到常规异常处理程序。