2013-11-26 91 views
1

我有一個產品實體,並希望在頁面上顯示產品列表(從數據庫),然後在控制器中獲取所選實體。如何在symfony2中的控制器中獲取實體

ProductsType:

class ProductsType extends AbstractType 
{ 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 

    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('products', 'entity', array(
       'class' => 'MyBundle:Product', 
       'property' => 'description', 
       'label' => false, 
       'query_builder' => function(EntityRepository $er) { 
        return $er->createQueryBuilder('u') 
         ->orderBy('u.description', 'DESC'); 
       }, 
      )); 
    } 

    public function getName() 
    { 
     return 'products'; 
    } 
} 

嫩枝模板:

<form action="{{ path('mgmt_product_update', { 'id': product.id }) }}" method="post" {{ form_enctype(form) }}> 
    <strong>Product:</strong>{{ form_widget(form.products) }} 
    <button value="update" name="update">Update</button> 
</form> 

控制器:

... 
public function productUpdateAction() // ? 
... 

我怎樣才能在productUpdateAction獲得所選產品()? 也許我做得不對,這不是最好的解決方案?

回答

3

目前還不清楚您是否已經built your form。因此,這裏是顯示所選產品的代碼:

public function productUpdateAction($id) 
{ 
    $product = $this->getDoctrine() 
     ->getRepository('MyBundle:Product') 
     ->find($product_id); 

    $form = $this->createForm(new ProductsType(), 
     $product) 
     ->getForm(); 

    $form->handleRequest($request); 

    if ($form->isValid()) 
    { 
     # get and display the selected product 
     return new Response($form->get('products')->getData()->getId()); 

     # get back to the page once the form was submitted 
     return $this->redirect($this->generateUrl('mgmt_product_update', 
      array('id' => $id)); 
    } 

    return $this->render('YOUR_TWIG_TEMPLATE', array(
     'form' => $form->createView(), 
    ));  
} 

根據你的目標是什麼(?更新產品),代碼應該有所改變。

編輯:如上所述here,getData()將返回對象,因此您可以使用$form->get('products')->getData()->getId()來訪問產品ID。

相關問題