#symfony #twig-extension
#symfony #twig-расширение
Вопрос:
переходя на smyfony, мы сталкиваемся с некоторыми основными проблемами при запуске. Мы переносим существующий проект на symfony. В связи с этим, f.eg . конфигурации и т.д. обязательно должны быть на php и динамически — пока никаких проблем.
но: как я могу загрузить собственную функцию twig (расширение) в микроядре?
kernel.php
protected function configureContainer(ContainerConfigurator $container) {
$container->extension("twig", array(
"paths" => array(__DIR__ . "/../resources/views"),
"auto_reload" => true,
"cache" => false,
));
}
Twig работает нормально и не создает проблем … до тех пор, пока нам не понадобятся наши собственные функции.
(ТЕСТ!) Функция twig:
namespace AppKernelTwigExtensions;
use TwigExtensionAbstractExtension;
use TwigTwigFunction;
class TwigTest extends AbstractExtension {
public function getFunctions() {
return array(
new TwigFunction("test", array($this, function() { return "ABC"; })),
);
}
}
использование следующего источника в «ConfigureContainer» не имеет никакого эффекта:
$container->services()
->load("App\Kernel\TwigExtensions\", sprintf("%s/Kernel/TwigExtensions/TwigTest.php", __DIR__))
->tag('twig.extension')
Есть идеи для моего следующего шага? Спасибо!
Комментарии:
1. Вы зарегистрировали расширения в контейнере, но не в самом twig, обычно это делается путем вызова
addExtension
. Вы можете увидеть, как это делается на этапе компиляции .2. Спасибо за ваш комментарий и помощь.
addExtension
кажется, в этом и есть смысл. Но, к сожалению,getDefinition('twig')
вconfigureContainer
fct в kernel.php . я также не могу обратиться к twig как к переменной, чтобы напрямую добавить расширение, но мне нужно инициализировать расширения там.3. Нет, это не так, у вас
ContainerConfigurator
там есть a, а не aContainerBuilder
, но вы можете создать свой собственный проход компилятора и повторить то, что делает framework.