Symfony2 Переопределить часть шаблона из стороннего пакета

Я использую SonataAdminBundle для своего проекта, и я хотел бы переопределить блок.

Если я создам шаблон в app/Resources/views/SonataAdminBundle/views/standard_layout.html.twig очистить кеш и сделать это:

{% extends 'SonataAdminBundle::standard_layout.html.twig' %}

{% block theBlockIWantToOverride %}
{% endblock %}

Я получаю Maximum function nesting level of '250' reached, aborting! ошибка.

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

Причина, по которой я хочу это сделать, заключается в том, что я использую SensioLabsInsight, и меня это беспокоит raw фильтр ветки, который использует SonataAdminBundle. Я знаю, что могу просто проигнорировать предупреждение, но оно кажется неправильным.

Также я попытался переопределить пакет, создав пакет php app/console generate:bundle а затем в src / Vendor / AdminBundle / VendorAdminBundle.php я добавил:

/**
* {@inheritdoc}
*/
public function getParent()
{
return 'SonataAdminBundle';
}

и сделал вышеуказанный процесс, добавил src/Vendor/AdminBundle/Vendor/Resources/views/standard_layout.html.twig который не решил проблему. Опять получилась ошибка уровня вложенности.

4

Решение

Шаблон на app/Resources/views/SonataAdminBundle/views/standard_layout.html.twig расширяется SonataAdminBundle::standard_layout.html.twig это тот же файл, означающий, что он просто расширяется, пока не умрет.

Вы должны скопировать содержимое файла и изменить то, что вам нужно в этом.

Или вы можете скопировать оригинал standard_layout.html.twig и переименовать его (чтобы standard_base.html.twig например), затем переопределите ваши блоки в вашей версии standard_layout.html.twig а затем продлите standard_base.html.twig,

Еще более альтернативно и лучше для SonataAdminBundle, вы можете использовать другой именованный шаблон (VendorAdminBundle::standard_layout_override.html.twig например) как ваша версия standard_template.html.twig расширить оригинал и установить его в конфиге, как …

sonata_admin:
templates:
layout:  VendorAdminBundle::standard_layout_override.html.twig
5

Другие решения

С тем, как вы пытаетесь:

  1. Вы должны скопировать содержимое исходного файла
  2. Вставьте содержимое в app/Resources/views/SonataAdminBundle/views/standard_layout.html.twig
  3. Переопределить [| изменить] блок, который вы хотите
  4. Не нужно добавлять {% extends 'SonataAdminBundle::standard_layout.html.twig' %}

С док : http://sonata-project.org/bundles/admin/master/doc/reference/templates.html

Извлечь:

sonata_admin:
templates:
layout:  SonataAdminBundle::standard_layout.html.twig
ajax:    SonataAdminBundle::ajax_layout.html.twig
list:    SonataAdminBundle:CRUD:list.html.twig
show:    SonataAdminBundle:CRUD:show.html.twig
edit:    SonataAdminBundle:CRUD:edit.html.twig
history: SonataAdminBundle:CRUD:history.html.twig
preview: SonataAdminBundle:CRUD:preview.html.twig
delete:  SonataAdminBundle:CRUD:delete.html.twig
batch:   SonataAdminBundle:CRUD:list__batch.html.twig
acl:     SonataAdminBundle:CRUD:acl.html.twig
action:  SonataAdminBundle:CRUD:action.html.twig
select:  SonataAdminBundle:CRUD:list__select.html.twig
filter:  SonataAdminBundle:Form:filter_admin_fields.html.twig
dashboard:           SonataAdminBundle:Core:dashboard.html.twig
search:              SonataAdminBundle:Core:search.html.twig
batch_confirmation:  SonataAdminBundle:CRUD:batch_confirmation.html.twig
1

По вопросам рекламы [email protected]