Symfony2:在页面之间传递参数的问题

时间:2013-12-21 19:26:03

标签: php symfony

我对使用Symfony 2进行PHP开发很新,所以我使用“Symfony Blog”示例作为新的简单应用程序的基础,以便尝试我学到的东西。

我已经定义了这个规则:

AhorrarMainBundle_cuenta:
  pattern:  /cuenta/{id}
  defaults: { _controller: AhorrarMainBundle:Cuenta:cuenta }
  requirements:
       _method:  GET
            id: \d+

所以我希望当我在浏览器中写下这个地址(ahorro / app_dev / cuenta / 1)时,会启动“cuentaAction”传递数字1作为参数。

这是我用作布局的树枝模板的代码:

{% block navigation %}
   <nav>
      <ul class="navigation">
         <li><a href="#">Home</a></li>
         <li><a href="#">About</a></li>
         <li><a href="{{ path('AhorrarMainBundle_cuenta', {'id': id}) }}">Cuenta</a></li>
         <li><a href="{{ path('AhorrarMainBundle_movimientos') }}">Movimientos</a></li>
      </ul>
   </nav>
{% endblock %}

这是调用“ahorro / app_dev / cuenta / 1”时启动的页面代码:

{% extends "AhorrarMainBundle::base.html.twig" %}
{% block title %}Cuenta{% endblock%}
{% block body %}
    <header>
        <h1>Cuenta symAhorro</h1>
    </header>
{% endblock %}

实际上,这只是一个我希望展示的简单页面,仅此而已。但当我尝试访问任何页面时,我收到此错误:

![错误图片] http://imageshack.com/a/img837/1190/dg53.jpg

EDITED 这是我用作控制器的类:

class CuentaController extends Controller{
public function indexAction()
{
    return $this->render('AhorrarMainBundle:MainPage:index.html.twig');
}
public function cuentaAction($id)
{
    $em = $this->getDoctrine()->getManager();

    $cuenta = $em->getRepository('AhorrarMainBundle:Cuenta')->find($id);

    if (!$cuenta) {
        throw $this->createNotFoundException('Unable to find Blog post.');
    }

    return $this->render('AhorrarMainBundle:Cuenta:cuenta.html.twig', array(
        'cuenta'      => $cuenta,
    ));
}
}

所以似乎问题是“id”变量不存在,但我认为我遵循了“Symfony书”关于论点的说法......

任何人都可以帮我说我该怎么做?或者我在哪里可以找到一个有效的例子?

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果您没有在控制器中专门指定模板变量,则它不会自动存在。

您可以通过默认请求变量获取名为“id”的请求参数:

app.request.get( 'id' )

或者如果您想在多个地方使用它,请自行分配变量:

{% set id = app.request.get( 'id' ) %}

答案 1 :(得分:0)

hpoeri评论的是解决您问题的方法。

另一个(通常是首选的)是将$id变量从控制器返回到视图,因为这基本上是控制器和视图之间的分离。因此,您的控制器中的返回语句应为:

return $this->render('AhorrarMainBundle:Cuenta:cuenta.html.twig', array(
    'cuenta'      => $cuenta,
    'id'          => $id
));

您在返回的数组中传递的所有变量都可在您的视图中使用。

在这里查看Symfony2文档,特别是“渲染模板”一节 http://symfony.com/doc/current/book/controller.html#rendering-templates 以及关于“视图”的部分,它解释了变量处理在这里更好一些: http://symfony.com/doc/current/quick_tour/the_view.html