【问题标题】:Passing arguments to an embedded controller in Symfony 2.8在 Symfony 2.8 中将参数传递给嵌入式控制器
【发布时间】:2016-02-18 22:02:42
【问题描述】:

我正在使用 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 原则。

【问题讨论】:

  • 通过 $argument1 = $request->query->get('argument1'); 检索参数也不起作用值保持为空。他们根本没有通过,所以看起来。

标签: symfony dry symfony-2.8


【解决方案1】:

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

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

【讨论】:

  • 感谢您迅速且非常正确的回复。它有效!
  • 没问题,一个容易搞砸,一个很难发现
  • 在搜索此错误约 1 小时后 4 年后来到这里。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 2016-04-25
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多