我正在尝试从树枝扩展中调用控制器。我不想将控制器称为服务,因为我会失去所有花哨的快捷方式。
我想要实现的是在你做的时候像树枝一样调用控制器:
{{ 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)) }}
我认为(可能是错误的)在没有模板步骤的情况下调用它会更快。
编辑:我终于成功编写了这个代码:
$environment->getExtension('Symfony\Bridge\Twig\Extension\HttpKernelExtension')->renderFragment(
$environment->getExtension('Symfony\Bridge\Twig\Extension\HttpKernelExtension')->controller(
$hook['action'],
$hook['jsonParameters']
)
);
(我在 twig 的缓存中做了一个 grep 并复制了它的编译版本)。我唯一关心的是参考Symfony\Bridge\Twig\Extension\HttpKernelExtension
,我宁愿让树枝处理这个选择,但我不知道如何。
我有两个问题:
- 你认为这Symfony\Bridge\Twig\Extension\HttpKernelExtension
足够稳定来明确引用它吗?- 如果不是,你会怎么做让树枝处理它?