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

Функция controller

Функция controller позволяет вызвать контроллер прямо из Twig-шаблона. Первым параметром передаётся имя контроллера в формате App\Controller\ArticleController::index, вторым - массив параметров, которые будут переданы в метод контроллера.

Функция возвращает результат выполнения контроллера. Если контроллер возвращает объект Response, Symfony отрендерит его содержимое. Это удобно, когда нужно встроить часть страницы, которая формируется отдельным контроллером.

Синтаксис

{{ controller('App\\Controller\\ArticleController::index', {param: value}) }}

Пример

Давайте создадим контроллер, который возвращает строку, и вызовем его из шаблона:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(): Response { return new Response('hello'); } } ?>

Теперь вызовем этот контроллер из Twig-шаблона:

<p>{{ controller('App\\Controller\\ArticleController::index') }}</p>

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

<p>hello</p>

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function user(string $name): Response { return new Response($name); } } ?>

Вызовем метод user с параметром name:

<p>{{ controller('App\\Controller\\ArticleController::user', {name: 'abcde'}) }}</p>

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

<p>abcde</p>

Пример

Давайте вызовем контроллер, который рендерит отдельный Twig-шаблон:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function list(): Response { return $this->render('article/list.html.twig', [ 'items' => ['a', 'b', 'c', 'd', 'e'], ]); } } ?>

Шаблон article/list.html.twig выводит переданный массив:

<ul> {% for item in items %} <li>{{ item }}</li> {% endfor %} </ul>

Теперь вызовем этот контроллер из основного шаблона:

<div> {{ controller('App\\Controller\\ArticleController::list') }} </div>

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

<div> <ul> <li>a</li> <li>b</li> <li>c</li> <li>d</li> <li>e</li> </ul> </div>

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

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