私はtwigエクステンションからコントローラを呼び出そうとしています。 私はcontroller as a serviceに電話をかけたくありません。なぜなら、すばらしいショートカットをすべて失うからです。symfony - twigエクステンション内でコントローラアクションを呼び出す
は私が達成したいしたいあなたが行うとき小枝のようなコントローラがそれを行う呼び出すことです:
{{ render(controller(
'AppBundle:Article:recentArticles',
{ 'max': 3 }
)) }}
私は「レンダリング」のソースコードを見て、「コントローラ」小枝の機能を見つけることを試みました、私はそのやり方を理解することができませんでした。 CmsExtension:cmsRenderHook.html.twig
テンプレートで
return $environment->render('FooBundle:TwigExtension/CmsExtension:cmsRenderHook.html.twig', [
'hook' => $hook,
]);
:(誤って多分)私が思う
{{ render(controller(hook.stringControllerAction, hook.arrayParameters)) }}
それは速いだろうというのが私の小枝の拡張子で
:今から は、私は満足のいかないが、functionnalコードを達成しましたテンプレートステップなしで呼び出すことができます。
編集:私は最終的にこれをコーディングするsuccessed:
$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
を参照することです、私はむしろ小枝にこの選択を処理させたいと思いますが、私はどのように見つけることができません。
私は2つの質問があります。 - あなたはSymfony\Bridge\Twig\Extension\HttpKernelExtension
がenoughtそれに明示的REFEREし安定していると思いますか? - もしあなたがそれを扱うようにしたいのであれば?
私はこの解決策を試みましたが、私は呼び出し可能呼び出しを呼び出すことができませんでした。 call_user_functionを使用するか、それを匿名関数として使用する必要がありますか? (私は何年もPHP 5.2を使用していましたので、愚かな質問をしています、ごめんなさい) – Bruno