2014-09-25 2 views
2

Я изучаю symfony2 и очень люблю его (мигрируя из ZendFramework 1.x), но теперь я застрял с шаблоном для завивки. Можете ли вы указать мне правильное направление?Как расширить шаблон ветки из родительского пакета?

В моем приложении много клиентов, и каждый из них имеет некоторые настройки (в основном, шаблоны, но также контроллеры и т. Д.).

Я пытаюсь достичь этого путем наследования наследования/я создал ClientBundle, который наследует от BaseBundle, сохраняя весь базовый код и шаблоны ... он работает так, как мне нужно для всех шаблонов бутонов. Когда я создаю шаблон в ClientBundle, он накладывает шаблон с BaseBundle, и я не могу получить доступ с шаблона ClientBundle к исходному шаблону от BaseBundle. Я хотел бы расширить родительский шаблон, а не наложить его ... это невозможно?

Спасибо!

ответ

1

Стандартная команда в шаблоне веточки для расширения является:

{% extends 'BaseBundle::yourTemplate.html.twig' %} 

Вы, вероятно, использовать то же имя для шаблона в вашем детском расслоении (вы, вероятно, yourTemplate.html.twig в обеих ваших родителях и ваш ребенок bundle, поэтому дочерний шаблон переопределяет родительский элемент). В этом случае вы можете переименовать свой дочерний шаблон (yourTemplate2.html.twig), а затем расширить дочерний шаблон от родителя. Подробнее о наследовании жгутов и шаблонах прута Extentions: http://symfony.com/doc/current/cookbook/bundles/inheritance.html http://symfony.com/doc/current/book/templating.html

+0

Да, я хочу, чтобы шаблон был с тем же именем ... если бы я изменил имя, мне нужно было бы переопределить и соответствующее действие и изменить шаблон ... Я ищу что-то более элегантное. Есть ли какое-то решение? –

+0

, даже если вы переопределите шаблон, вы все равно можете использовать команду extend. Вы пытались включить строку {% extends ...%} в свой дочерний шаблон? – iiirxs

+1

Да, я закончил цикл include. Он не включает родительский шаблон, даже если я использую имя родительского пакета в расширении :-( –

3

Использования стандартного Symfony extends обозначения для ссылки расслоения результатов шаблона родителя в фатальной ошибке. Symfony интерпретирует ссылку на ваш шаблон на BaseBundle как ChildBundle в результате наследования пучка, вызывающего исключение уровня вложенности функции.

Вы можете ссылаться на расслоение файл шаблона родителя, непосредственно используя следующие обозначения:

{% extends "@Client/Foo/bar.html.twig" %} 

замена для:

{% extends "ClientBundle:Foo:bar.html.twig" %} 

Twig-х FilesystemLoader расщепляет ссылка строку в пространства имен (Заказчик) и Путь (Foo/bar.html.twig). Пространство имен - это имя вашего пакета без суффикса Bundle. Полный путь для каждого пространства имен разрешается путем конкатенации по умолчанию <bundle_path>/Resources/views/ с поставленным пути.

+1

Это правильное решение. фиктивные/базовые шаблоны. – ShiraNai7

Смежные вопросы