Я работаю над переносом существующего 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?