Как отобразить шаблон без пользовательского контроллера
Как отобразить шаблон без пользовательского контроллера
Обычно, когда вам нужно создать страницу, вам нужно создать контроллер и
отобразить шаблон изнутри этого контроллера. Но если вы отображаете простой
шаблон, который не требует передачи каких-либо данных в него, вы можете
полностью избежать создания контроллера, используя встроенный контроллер
FrameworkBundle:Template:template
.
Например, представьте, что вы хотите отобразить шаблон static/privacy.html.twig
,
который не требует передачи в него каких-либо переменных. Вы можете сделать это,
не создавая контроллер:
1 2 3 4 5
acme_privacy:
path: /privacy
defaults:
_controller: FrameworkBundle:Template:template
template: static/privacy.html.twig
Контроллер FrameworkBundle:Template:template
просто отобразит любой переданный
вами шаблон в качестве значения template
по умолчанию.
Конечно же, вы можете также использовать этот фокус при отображении встроенных контроллеров изнутри шаблона. Но так как целью отображения контроллера из шаблона обычно является подготовка некоторых данных в пользовательском контроллере, это наверное полезно только если вы хотите частично кешировать эту страницу (смотрите Как отобразить шаблон без пользовательского контроллера).
1
{{ render(url('acme_privacy')) }}
Кеширование статическго шаблона
Так как шаблоны, отображённые таким способом, обычно статические, может иметь смысл кешировать их. К счастью, это просто! Путём конфигурации нескольких других переменных в вашем маршруте, вы можете точно контролировать, как будет кеширована ваша страница:
1 2 3 4 5 6 7
acme_privacy:
path: /privacy
defaults:
_controller: FrameworkBundle:Template:template
template: 'static/privacy.html.twig'
maxAge: 86400
sharedAge: 86400
Значения maxAge
и sharedAge
используются для изменения объекта ответа
(Response), созданного в контроллере. Для более детальной информации о кешировании,
см. HTTP-кеширование.
Также существует переменная private
(не показанная здесь). По умолчанию, объект
Response будет публичным, если переданы maxAge
или sharedAge
. Если установлено
значение true
, Response будет отмечен как приватный.