Использование base.html.twig в качестве макета по умолчанию в Symfony2 сухим способом - PullRequest
4 голосов
/ 27 марта 2012

У меня очень простая проблема: у меня есть приложение Symfony2, и оно не использует файл базового макета base.html.twig. Что нужно, чтобы ваше приложение использовало этот макет? Похоже, он должен просто использовать его автоматически.

Редактировать: Я обнаружил, что если я поставлю {% extends "::base.html.twig" %} в верхней части любого файла макета, а затем поставлю {% block body %} и {% endblock %} вокруг моего контента, он будет использовать base.html.twig. Тем не менее, я пока только выяснил, как это сделать для каждого файла. Если вам нужно это включить в каждый шаблон, для которого вы хотите его использовать, это было бы поразительно глупо, и я не могу себе представить, что это так, учитывая, насколько хорошо принцип DRY применяется везде в Symfony.

Итак, более конкретная версия моего вопроса такова: как я могу заставить Symfony использовать base.html.twig глобально, СУХИМ способом?

Ответы [ 5 ]

5 голосов
/ 27 марта 2012

Во-первых, вы должны понимать, из чего скомпилированы шаблоны Twig - классы. Затем представьте, что вы спрашиваете, как спрашивать, как заставить все ваши простые классы PHP расширять какой-то базовый класс без написания extends в вашем коде. Это звучит как хорошая идея?

1 голос
/ 29 сентября 2012

Да, я поднял эту проблему в github, и это то, что fabpot должен был сказать

Макет является частью шаблона и принадлежит ему.Вы должны иметь возможность делать с переменными все, что хотите, и если вы хотите условно расширить шаблон, посмотрите здесь: http://twig.sensiolabs.org/doc/recipes.html#making-a-layout-conditional

Итак, суть в том, что мы не можем этого сделать, илимы не должны этого делать, и если мы делаем это, мы делаем это неправильно ...

1 голос
/ 27 марта 2012

Есть способ сделать это. Это не рекомендуется, но возможно.

twig:
    base_template_class: Path\To\Base\TemplateClass

Вполне возможно, что вы можете столкнуться с проблемами. Symfony2 также имеет шаблон, который не предназначен для использования базового шаблона, поэтому вам, возможно, придется искать способ переопределить эту функцию для системных шаблонов.

Я бы посмотрел на документы , а также это . Они оба говорят об использовании этой функции.

0 голосов
/ 12 августа 2012

Это не ответ, а обходной путь. Хороший совет - сохранить макрос в вашем редакторе и автоматически загрузить его для twig файлов. Затем, когда вам это нужно, примените его, и вы сэкономите много нажатий клавиш. Для кода это не СУХОЙ код, но для ваших пальцев, и я предпочитаю делать это вместо модификации ядра Symfony.

Ниже приведен макрос для VIM. Поместите это в .vimrc, перезагрузите vim и в вашем twig файле запустите @t в обычном режиме:

autocmd BufNewFile,BufRead *html.twig let @t="ggO{% extends '::base.html.twig' %}\033o{% block body %}\033Go{% endblock %}\033gg"
0 голосов
/ 27 марта 2012

Похоже, я нашел ответ на свой вопрос, хотя искренне надеюсь, что ошибаюсь. Согласно этому разделу документов , вы должны включить эту extends вещь на каждой странице шаблона! Я просто вырвал весь мой компьютер.

Редактировать: Для ясности, ответ на мой вопрос, очевидно, заключается в том, что это невозможно.

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