Symfony 3 - переопределить шаблоны пакетов - prependPath не работает - PullRequest
0 голосов
/ 14 января 2019

Я работаю над переносом существующего Symfony 2.8 на Symfony 3.4. В настоящее время я использую наследование пакетов для расширения некоторых функций FOSUserBundle с помощью собственной пользовательской реализации.

Это прекрасно работает как в Symfony 2.8, так и в Symfony 3.4. Однако наследование комплекта устарело, и я хотел бы подготовить мой проект для будущего обновления до Symfony 4.

Я знаю, что могу переместить шаблоны, которые я хочу переопределить, из MyUserBundle/Resources/views/... в папку ресурсов приложений в app/Resources/FOSUserBundle/views/.... Однако я хотел бы сохранить файлы в своем собственном пакете (или папке src в SF 4) для лучшего повторного использования.

Следуя подсказке из другого вопроса, я пытаюсь использовать CompilerPass, чтобы добавить путь в моем комплекте к пути поиска:

// src/MyUserBundle/MyUserBundle.php
class MyUserBundle extends Bundle { 
    //public function getParent() {
    //    return 'FOSUserBundle';
    //}

    public function build(ContainerBuilder $container) {
        parent::build($container);  
        $container->addCompilerPass(new OverrideCompilerPass());
    }
}

// src/MyUserBundle/DependencyInjection/Compiler/OverrideCompilerPass.php
public function process(ContainerBuilder $container) {
    $path = dirname(__DIR__, 2).'/Resources/views';
    $twigFilesystemLoaderDefinition = $container->findDefinition('twig.loader.native_filesystem');
    $twigFilesystemLoaderDefinition->addMethodCall('prependPath', array($path, 'FOSUser'));
}

Однако это не работает. Шаблоны не найдены, и Symfony использует шаблоны FOS по умолчанию. Отладчик показывает это:

  // bin/console debug:twig WITH bundle inheritance
  @FOSUser    src/AppUserBundle/Resources/views/                                             
              vendor/friendsofsymfony/user-bundle/Resources/views/    

  // bin/console debug:twig WITHOUT bundle inheritance
  @FOSUser    vendor/friendsofsymfony/user-bundle/Resources/views/   

Таким образом, добавление прохода компилятора не имеет никакого значения: когда наследование комплекта отключено, шаблоны ищутся только в папке FOS ...

Как решить эту проблему? Является ли использование app/Resources/... единственной опцией или как-то возможно сохранить файлы в моем собственном каталоге dir?

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