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

Дата обновления перевода 2023-09-01

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

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

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

1
2
3
4
5
6
7
8
9
10
11
public function index($name): Response
{
    $response = $this->forward('AppBundle:Something:fancy', array(
        'name'  => $name,
        'color' => 'green',
    ));

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

    return $response;
}

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

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

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