我試圖從樹枝延伸調用控制器。 我不想打電話給controller as a service,因爲我會失去所有奇特的捷徑。symfony - 調用一個控制器在樹枝延伸的行動
想我要實現的是調用像樹枝控制器做時,你這樣做:
{{ render(controller(
'AppBundle:Article:recentArticles',
{ 'max': 3 }
)) }}
我看着的「渲染」的源代碼,並試圖找到「控制器」樹枝的功能,但我沒有設法理解如何去做。 從現在我實現了一個不令人滿意,但functionnal代碼:
在我的樹枝extention:
return $environment->render('FooBundle:TwigExtension/CmsExtension:cmsRenderHook.html.twig', [
'hook' => $hook,
]);
在CmsExtension:cmsRenderHook.html.twig
模板:
{{ render(controller(hook.stringControllerAction, hook.arrayParameters)) }}
我認爲(也許錯誤地),它會更快在沒有模板步驟的情況下調用它。
編輯:我終於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
,我寧願讓小枝來處理這個選擇,但我不知道如何。
我有兩個問題: - 你認爲Symfony\Bridge\Twig\Extension\HttpKernelExtension
足夠穩定以引用明確嗎? - 如果不是,你會怎麼做,讓小枝處理它?
我試過這個解決方案,但是我沒有設法調用可調用函數。我是否必須使用call_user_function或將其用作匿名函數? (我使用PHP 5.2多年,所以我問多麼愚蠢的問題,抱歉) – Bruno