Я пытаюсь вызвать контроллер из расширения ветки. Я не хочу называть controller as a service, так как я потеряю все причудливые ярлыки.symfony - вызов контроллера-действия в расширении веточки
Хочет, я хочу добиться того, чтобы позвонить контроллеру как прутик сделать это, когда вы делаете:
{{ 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
, я бы предпочел, чтобы твинг справился с этим выбором, но я не могу узнать, как это сделать.
У меня есть два вопроса: - Как вы думаете, что Symfony\Bridge\Twig\Extension\HttpKernelExtension
устойчива к refere прийти явно к нему? - если нет, как бы вы сделали, чтобы позволить веточку обрабатывать его?
Я пробовал это решение, но мне не удалось вызвать вызываемый. Нужно ли использовать функцию call_user_function или использовать ее как анонимную функцию? (Я использовал PHP 5.2 в течение многих лет, поэтому я спрашиваю, насколько глупые вопросы, извините) – Bruno