Как пересылать запросы другому контроллеру

Дата обновления перевода 2025-02-14

Как пересылать запросы другому контроллеру

Хоть это и не очень распространено, вы также можете делать пересылку внутренне другому контроллеру с помощью метода forward().

Вместо того, чтобы перенаправлять браузер пользователя, он делает "внутренний" подзапрос и вызывает другой контроллер. Метод forward() возвращает объект Response, который возвращается из того контроллера:

1
2
3
4
5
6
7
8
9
10
11
public function index(string $name): Response
{
    $response = $this->forward('App\Controller\OtherController::fancy', [
        'name'  => $name,
        'color' => 'green',
    ]);

    // ... далее настраивать ответь или вернуть его напрямую

    return $response;
}

Массив, переданный методу, становится аргументами для результирующего контроллера. Метод целевого контроллера может выглядеть как-то так:

1
2
3
4
public function fancy(string $name, string $color): Response
{
    // ... создать и вернуть объект Ответа
}

Так же, как и при создании контроллера для маршрута, порядок аргументов метода fancy() не имеет значения: соответствие проводится по имени.