РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
171 of 1361 menu

Метод forward класса AbstractController

Метод forward класса AbstractController перенаправляет запрос на другой контроллер, не изменяя адрес в браузере пользователя. Первым параметром передаётся имя контроллера в формате 'App\Controller\ArticleController::index', вторым - массив аргументов, которые будут переданы в целевой метод. В отличие от redirectToRoute, метод forward не создаёт новый HTTP-запрос, а вызывает другой контроллер внутри текущего запроса.

Синтаксис

$this->forward(string $controller, array $path = [])

Пример

Давайте перенаправим запрос из метода index в метод show того же контроллера:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(): Response { return $this->forward('App\Controller\ArticleController::show'); } public function show(): Response { return new Response('hello'); } } ?>

Результат выполнения кода:

hello

Пример

Давайте передадим аргументы в целевой контроллер:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/user/{name}', name: 'article_user')] public function index(string $name): Response { return $this->forward( 'App\Controller\ArticleController::show', ['name' => $name] ); } public function show(string $name): Response { return new Response($name); } } ?>

Результат выполнения кода для адреса /user/abcde:

abcde

Пример

Давайте перенаправим запрос в контроллер другого класса:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class MainController extends AbstractController { #[Route('/main', name: 'main_index')] public function index(): Response { return $this->forward( 'App\Controller\ArticleController::show', ['text' => 'article'] ); } } ?>
<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function show(string $text): Response { return new Response($text); } } ?>

Результат выполнения кода для адреса /main:

article

Пример

Давайте используем метод forward вместе с методом render для вывода шаблона:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { return $this->forward('App\Controller\ArticleController::show'); } public function show(): Response { return $this->render('article/show.html.twig', [ 'title' => 'article', ]); } } ?>
<h1>{{ title }}</h1>

Результат выполнения кода для адреса /article:

<h1>article</h1>

Смотрите также

  • класс AbstractController,
    который предоставляет базовые методы контроллера
  • метод render,
    который возвращает отрендеренный Twig-шаблон
  • метод redirectToRoute,
    который выполняет редирект на маршрут
  • метод generateUrl,
    который генерирует URL по имени маршрута
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить