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

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

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

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

    return $response;
}

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

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

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

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.