我使用Symfony Flex进行了全新的Symfony安装,新的骨架属于下一个Symfony 4目录结构。接下来,我将从树枝模板中嵌入一个控制器。
我试图这样做:
<div id="sidebar">
{{ render(controller(
'App:Article:recentArticles',
{ 'max': 3 }
)) }}
</div>
与如何将请求转发给其他控制器相同,我尝试过:
$response = $this->forward('App:Something:fancy', array(
'name' => $name,
'color' => 'green',
));
但是没有用。
有办法做到这一点吗?
答案 0 :(得分:2)
当我们使用简短约定a:b:c
来引用控制器时,它仅在控制器属于已安装的包时才有效。对于Symfony 4结构,默认情况下您的应用程序源不是捆绑包,因此上述操作无效。
对于Symfony 4方法,您可以使用其完全限定的类名称和方法来引用此控制器:
App\Controller\ArticleController::recentArticlesAction
将控制器嵌入到Twig模板中:
{{ render(controller('App\\Controller\\ArticleController::recentArticlesAction')) }}
答案 1 :(得分:0)
您必须将Bundle
添加到App
:
<div id="sidebar">
{{ render(controller(
'AppBundle:Article:recentArticles',
{ 'max': 3 }
)) }}
</div>
您可以阅读有关嵌入Controller in a Template (Twig)
答案 2 :(得分:0)
这是执行此操作的正确方法:
{# templates/base.html.twig #}
{# ... #}
<div id="sidebar">
{{ render(controller(
'App\\Controller\\ArticleController::recentArticles',
{ 'max': 3 }
)) }}
</div>
来源:https://symfony.com/doc/master/templating/embedding_controllers.html