小枝拡張からコントローラーを呼び出そうとしています。派手なショートカットがすべて失われるため、コントローラーをサービスとして呼び出したくありません。
私が達成したいのは、小枝のようにコントローラーを呼び出すことです。
{{ render(controller(
'AppBundle:Article:recentArticles',
{ 'max': 3 }
)) }}
「render」のソースコードを見て、「controller」小枝の機能を見つけようとしましたが、どうすればよいかわかりませんでした。今から、満足できないが機能的なコードを達成しました:
私の小枝の拡張では:
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']
)
);
(小枝のキャッシュでgrepを実行し、コンパイルされたバージョンを再現しました)。私の唯一の懸念は を参照することSymfony\Bridge\Twig\Extension\HttpKernelExtension
です。この選択は twig に処理させたいのですが、方法がわかりません。
2 つの質問があります:Symfony\Bridge\Twig\Extension\HttpKernelExtension
- それを明示的に参照するのに十分安定し
ていると思いますか? -そうでない場合、小枝にそれを処理させるにはどうすればよいですか?