2017-01-16 45 views
0

product.html.twig:如何显示在树枝模板控制器阵列

<ul id="navigation">     
    <li> 
     <a href="<?php echo product.getId() ?>"> 
      <?php echo product.getDescription() ?> 
     </a> 
    </li> 
</ul> 

控制器的操作方法包括:

public function showAction($id = 5) 
{ 
    $product = $this->getDoctrine() 
     ->getRepository('AppBundle:Product') 
     ->find($id); 

    if (!$product) { 
     throw $this->createNotFoundException(
      'No product found for id '.$id 
     ); 
    } 
    else 
    { 
     return $this->render('default/productItem.html.twig', array(
      'id'=> $id, 
      'name' => $name)); 
    } 
} 

我不能在列表中看到

+0

难道是持有对象的数组? '$ product'是一个对象吗? –

+1

为什么不用'href =“{{product.id}}”' – Matteo

回答

1

你输出应该使用Twig语法。

<ul id="navigation">     
    <li> 
     <a href="/page.php?id={{ product.getId() }}"> 
      {{ product.getDescription() }} 
     </a> 
    </li> 
</ul> 

在你的情况下,你的输入必须是一个对象。具有功能getId()getDescription()

在你的代码可以去掉“get”和只写例如{{ product.id }}

0

会建议一些更改控制器:

在你的控制器,你硬编码您$id参数设置为“5' 这可能是更好的使用路由注释和有一个可选的参数,而不是使用defaults硬编码任何。默认值。

此外,我建议您将其称为$productID,因此您知道它适用于产品实体,并将其与您在阵列中传递的内容(作为参数)区分开来。

一LSO在你的示例代码显示您传递的idname的参数,但首先$name没有在任何地方定义,$id是你在传递什么作为参数传递给控制器​​,但随后在树枝文件你不显示使用根本没有nameid!再加上你提供productItem.html.twig,但在帖子上方你可以称之为product.html.twig。那是不同的文件?

确保当您发布问题,#2,一切都清楚了。

这里是一个如何改变你的控制器代码按我的建议上面的示例:

/** 
* @Route("/showproduct/{productID}", 
*  defaults={"productID" = 0}, 
*  name="showproduct 
*/ 
public function showAction($productID) 
{ 
    $product = $this->getDoctrine() 
     ->getRepository('AppBundle:Product') 
     ->find($productID); 

    if (!$product) { 
     throw $this->createNotFoundException(
      'No product found for id '.$productID 
     ); 
    } 
    else 
    { 
     return $this->render('default/productItem.html.twig', array(
      'product'=> $product, 
     )); 
    } 
} 

然后在你的树枝文件(是productItem.html.twig ???)则是这样的:

<ul id="navigation">     
    <li> 
     <a href="{{ product.getId }}"> 
      {{ product.getDescription }} 
     </a> 
    </li> 
</ul> 

希望它能帮助!