Я пытаюсь вызвать контроллер из расширения ветки. Я не хочу вызывать контроллер как службу, так как я потеряю все причудливые ярлыки.
Я хочу добиться того, чтобы вызвать контроллер, например, twig, когда вы это сделаете:
{{ render(controller(
'AppBundle:Article:recentArticles',
{ 'max': 3 }
)) }}
Я посмотрел исходный код "рендеринга" и попытался найти функции ветки "контроллера", но мне не удалось понять, как это сделать. С этого момента я получил неудовлетворительный, но функциональный код:
В моем расширении ветки:
return $environment->render('FooBundle:TwigExtension/CmsExtension:cmsRenderHook.html.twig', [
'hook' => $hook,
]);
В шаблоне CmsExtension:cmsRenderHook.html.twig
:
{{ render(controller(hook.stringControllerAction, hook.arrayParameters)) }}
Я думаю (возможно, ошибочно), что было бы быстрее вызвать его без шага шаблона.
EDIT: мне наконец удалось закодировать это:
$environment->getExtension('Symfony\Bridge\Twig\Extension\HttpKernelExtension')->renderFragment(
$environment->getExtension('Symfony\Bridge\Twig\Extension\HttpKernelExtension')->controller(
$hook['action'],
$hook['jsonParameters']
)
);
(Я сделал grep в кеше ветки и воспроизвел его скомпилированную версию). меня беспокоит только ссылка на Symfony\Bridge\Twig\Extension\HttpKernelExtension
, я бы предпочел, чтобы twig справился с этим выбором, но я не могу понять, как это сделать.
У меня два вопроса: - считаете ли вы, что Symfony\Bridge\Twig\Extension\HttpKernelExtension
достаточно стабилен, чтобы ссылаться на него явно? - если нет, как бы ты позволил твигу справиться с этим?