我有一个symfony 2的问题(我对这个框架很新,我想学习如何正确使用,所以我希望你可以帮助我。)
我的问题如下:
我想在模板中展示产品,我需要传递一些参数,如姓名,描述和价格:
public function showAction($id)
{
$product = $this->getDoctrine()->getRepository('AcmeReadBundle:Product')->find($id);
if(!$product)
{
throw $this->createNotFoundException('error: not found');
}
$content = $this->renderView('AcmeReadBundle:Show:index.html.twig',$product);
return new Response($content);
}
如果我这样做,我有这个错误:
Catchable Fatal Error: Argument 2 passed to Symfony\Bundle\FrameworkBundle\Controller\Controller::renderView() must be of the type array, object given
我该如何解决这个问题?
答案 0 :(得分:6)
你做得很好,除了你应该将参数传递给数组中的模板,最好直接返回渲染模板!
public function showAction($id)
{
$product = $this->getDoctrine()->getRepository('AcmeReadBundle:Product')->find($id);
if(!$product)
{
throw $this->createNotFoundException('error: not found');
}
return $this->render('AcmeReadBundle:Show:index.html.twig', array('product'=> $product));
}
答案 1 :(得分:0)
你需要把:
$return $this->renderView('AcmeReadBundle:Show:index.html.twig',array('product' => $product));
你应该传递像array
这样的参数答案 2 :(得分:0)
如果为产品制作模板 AcmeReadBundle:Show:index.html.twig ,则放置另一个"产品"表达式前面的前缀,如下:
{{ product.title }}
{{ product.price }}
这样看是正确的:
{{ title }}
{{ price }}
在模板中。所以包装是一个糟糕的选择。 最佳选择是使用get_object_vars()
,它会自动将对象转换为数组:
return $this->render('AcmeReadBundle:Show:index.html.twig', get_object_vars($product));
这样你可以使用这个模板从另一个模板中调用它(因为它在每个表达式之前都不包含" product" -prefix),例如在通过Products
集合进行迭代时,因为您的Products
集合将包含Products
的集合,而不是Arrays of 1 object which is Product
的集合。