2017-01-16 2 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

You должен использовать синтаксис 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 Кодирует любого.. значение по умолчанию.

Кроме того, вместо $id, я предлагаю вам назвать это $productID, так что вы знаете, что это за Entity продукта, и отличить его от того, что вы передаете в массиве (в качестве параметра) к контроллеру прута

A lso в вашем примере кода вы показываете, проходящий в параметре id и name, но, во-первых, $name не определен нигде, и $id - это то, что вы передаете в качестве параметра Контроллеру, но затем в вашем файле твига вы не показываете использование либо name, либо id вообще! Плюс вы отдаете productItem.html.twig, но над сообщением вы назовете это product.html.twig. Так что это другой файл?

Убедитесь, что при размещении вопроса на Stackoverflow все ясно.

Вот пример того, как можно изменить ваш код контроллера в соответствии с моими предложениями выше:

/** 
* @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> 

Надеюсь, это поможет!