Laravel FormRequest с переменными - PullRequest
       0

Laravel FormRequest с переменными

0 голосов
/ 30 сентября 2019

Как мне поместить мою логику проверки в 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 () моего контроллера, переместив validate () в FormRequest. Однако, как вы можете видеть, ему нужна переменная $ commentable, которая извлекается контроллером.

Полагаю, я мог бы сделать так, чтобы FormRequest мог также извлекать эту переменную сама, но это было быужасный дубликат (так как это также проверило бы базу данных дважды ...). Так что это совсем не хорошее решение.

Есть идеи? Приветствия.

1 Ответ

1 голос
/ 30 сентября 2019

Ваш класс 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() функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...