Переопределить шаблон пакета из другого пакета в symfony 3.4 / 4 - PullRequest
0 голосов
/ 30 мая 2018

, поскольку наследование комплектов устарело с Symfony 3.4 и будет удалено в 4.0, я нахожу новое решение.У меня есть:

  • Приложение
  • FooBundle
  • BarBundle

И у меня нет проблем с переопределением шаблонов в приложении.Но мне нужно переопределить шаблоны из BarBundle в FooBundle.С наследованием комплектов это было так просто, но я потерян:)

Я пробовал пространства имен веток - безуспешно, но, возможно, я настроил его неправильно.Моя цель - иметь базовые шаблоны в BarBundle, которые я могу переопределить в FooBundle или Application или обоих.(это потому, что BarBundle - сторонний комплект, а FooBundle - мой комплект, используемый во многих проектах).

Возможно ли это без наследования комплектов и как?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вот более понятный пример

Давайте начнем с некоторых предположений

Имя вашего пакета: AcmeBundle

Пакет, который вы хотитепереопределить: FOSUserBundle

Выполнить команду php bin/console debug:twig и найти пространство имен пакета, который вы хотите переопределить.В данном случае это @FOSUser.

Ваше расширение пакета должно выглядеть следующим образом

<?php // src/AcmeBundle/DependencyInjection/AcmeExtension.php

namespace AcmeBundle\DependencyInjection;

// ...

use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;

class AcmeExtension extends Extension implements PrependExtensionInterface
{
    // ...

    public function prepend(ContainerBuilder $container)
    {
        $container->loadFromExtension('twig', array(
            'paths' => array(
                '%kernel.project_dir%/src/AcmeBundle/Resources/FOSUserBundle/views' => 'FOSUser', // You use the namespace you found earlier here. Discard the `@` symbol.
            ),
        ));
    }
}

Теперь вы можете создать src/AcmeBundle/Resources/FOSUserBundle/views/Security/login.html.twig для переопределения шаблона входа в FOSUserBundle.

Это был просто пример для FOSUserBundle.Вы можете изменить имена пакетов в зависимости от того, что вы пытаетесь переопределить.

0 голосов
/ 12 июня 2018

Так что мне недавно понадобилась та же функциональность, и с помощью комментария @NicoHasse мне удалось создать рабочий пример

В вашем классе расширений комплекта вам нужно реализовать PrependExtensionInterface, а затем вы можете изменять пути веток.Затем вам нужно знать оригинальное пространство имен, которое вам нужно переопределить (php bin/console debug:twig).

Вы можете подтвердить его работу с помощью команды отладки ветки, где вы должны увидеть свой путь на первом месте этого пространства имен.

class YourExtensionClass extends Extension implements PrependExtensionInterface
{
    public function prepend(ContainerBuilder $container)
    {
        $container->loadFromExtension('twig', [
            'paths' => [
                '%kernel.project_dir%/vendor/xx/yy/zzz' => 'OriginalVNamespace',
            ]
        ]);
...