Как метод контроллера Laravel обрабатывает несколько параметров запроса формы? - PullRequest
0 голосов
/ 30 апреля 2019

Я возвращаюсь в Laravel через несколько лет и пытаюсь понять, как работает уже существующий REST API, закодированный в Laravel. Я не могу понять, как работает конкретный метод контроллера с несколькими параметрами Form Request (или действительно ли он работает).

API REST был закодирован в Laravel 5.1. Я просмотрел официальную документацию (как 5.1, так и самую последнюю версию) и попытался найти в Интернете и в SO соответствующие темы (например, «несколько запросов формы контроллера laravel», «несколько запросов подсказки типа контроллера laravel» и т. Д.). , но я не могу найти четкого объяснения. Может быть, я смотрю на это под неправильным углом.

public function store(ProductRequest $productRequest, PromoRequest $promoRequest)
{
    // Validate product
    $product = new Product($productRequest->all());
    // Validate promo
    if ($promoRequest->get('promo')) {
        $promo = new Promo($promoRequest->get('promo'));
    }

    ...
}

В большинстве документов контроллер принимает только один объект запроса. Я действительно видел некоторые примеры, которые имеют несколько параметров запроса формы, но часто им рекомендовалось использовать только один запрос формы. Но, кроме наилучшей практики, как работает этот код? Когда этот метод вызывается, как Laravel узнает, как разделить запрос на два отдельных класса запроса формы?

Пожалуйста, дайте мне знать, если и как я могу объяснить свой вопрос более четко.

1 Ответ

0 голосов
/ 30 апреля 2019

Сервисный контейнер Laravel - это мощный инструмент для управления зависимостями классов и выполнения внедрения зависимостей.Внедрение зависимостей - это причудливая фраза, которая по сути означает это: зависимости класса «внедряются» в класс через конструктор или, в некоторых случаях, методы «setter».

Подробнее об этом можно прочитать здесь: https://laravel.com/docs/5.8/container

Редактировать: Дополнительный вопрос: Тем не менее, я не могу понять, как HTTP-запрос (который является только одним) можно разделить на два разных класса запроса?

HTTP-запрос не разделен;оно просто отправляется через оба класса.

Пример:

function example(Request $request) { 
    $productRequest = new ProductRequest($request);
    $promoRequest = new PromoRequest($request);
}

Будет одинаковым.

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