Расширение всех шаблонов в пачке с контроллера - PullRequest
5 голосов
/ 18 ноября 2011

У меня много шаблонов в комплекте, и все они расширяют один и тот же layout.html.twig.Вместо того, чтобы определять:

{% extends 'MyBundle::layout.html.twig' %}

вверху каждого шаблона, есть ли способ настроить это?

Я подозреваю, что мне нужно будет создать pre- или postExecute.() -подобный метод, основанный на слушателе событий, который расширил шаблон перед рендерингом.

1 Ответ

2 голосов
/ 23 ноября 2011

Это не очень хорошая идея, потому что не каждый шаблон должен расширять макет: есть некоторые «системные» шаблоны, такие как form_div_layout.html.twig, которые не предназначены для расширения чего-либо. Кроме того, не каждый шаблон, который вы пишете, должен расширять макет; вы встретите множество вариантов использования небольших встраиваемых шаблонов для ссылок из других шаблонов.

Если вы попытаетесь наложить макет на каждый шаблон, вам придется написать некоторую логику, чтобы исключить «системные» и встраиваемые шаблоны, чтобы они ничего не расширяли, и вам придется сделать то же самое для Ваш шаблон макета тоже, чтобы он не расширялся бесконечно. В этом случае вы решите проблему: вместо того, чтобы явно определять, какой макет расширять в каждом шаблоне, вам придется явно указать, какие шаблоны должны , а не расширять ваш макет. Это будет очень грязно и очень быстро.

Чтобы понять эту идею более полно, вам нужно знать, что за кулисами шаблоны на самом деле являются просто классами PHP. Имеет ли смысл делать конкретный класс родительским для всех остальных классов, а затем явно указывать, какие классы должны , а не расширять этот родительский класс?

Но если я не убедил вас не пойти по этому пути, есть параметр Twig, который позволяет вам установить базовый класс шаблона для всех шаблонов:

twig:
    base_template_class: Your\Layout\ClassName\Here

Вы можете расширить \Twig_Template или реализовать \Twig_TemplateInterface и повеселиться в течение нескольких часов, после чего, я надеюсь, вы будете убеждены, что вообще откажетесь от этой идеи. Удачи. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...