将参数传递给Symfony 2.8中的嵌入式控制器

时间:2016-02-18 22:02:43

标签: symfony dry symfony-2.8

我正在使用Symfony 2.8.0(因为我发现Symfony 3.x目前尚未成熟,但现在不要进入讨论)。

根据官方文件 (http://symfony.com/doc/2.8/book/templating.html#embedding-controllers) 应该可以将参数传递给从视图中调用的嵌入式控制器。

但是,这似乎不起作用。我总是得到以下例外:

  

" Controller" AppBundle \ Controller \ DefaultController :: buildNavigationAction()"要求你为" $ argument1"提供一个值。参数(因为没有默认值或因为在此之后存在非可选参数)。"

在我的视图中,我有以下代码:

{{ render(controller('AppBundle:Default:buildNavigation'), {
    'argument1': 25,
    'argument2': 50
}) }}

控制器如下所示:

public function buildNavigationAction($argument1, $argument2)
{
    // ... some logic ...

    return $this->render(
        'navigation.html.twig', array(
            'foo' => $argument1,
            'bar' => $argument2
        )
    );
}

是什么给出的?这是一个错误吗?

文档中描述的用例(在每个页面上呈现基本模板中的动态内容)正是我使用它的原因。在每一个控制器中重复相同的逻辑是对DRY原则的明显罪恶。

1 个答案:

答案 0 :(得分:2)

您的语法不正确,因为您没有将值传递给控制器​​,因为您过早关闭了)。它应该是:

{{ render(controller('AppBundle:Default:buildNavigation', {
    'argument1': 25,
    'argument2': 50
})) }}