如何使用Symfony 4目录结构在模板中嵌入控制器

时间:2017-07-30 04:54:54

标签: symfony twig

我使用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',
));

但是没有用。

有办法做到这一点吗?

3 个答案:

答案 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