Laravel FormRequest带变量

时间:2019-09-29 23:56:19

标签: laravel validation

在知道验证规则需要控制器设置的变量的情况下,如何将验证逻辑放入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也可以检索该变量本身,但这将是一个丑陋的重复(因为它还会对数据库进行两次探测...)。因此,这根本不是一个好的解决方案。

有什么主意吗?干杯。

1 个答案:

答案 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()