2013-11-26 4 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> 

컨트롤러 :

내가 productUpdateAction에서 제품을 선택 얻을 수있는 방법
... 
public function 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에 액세스 할 수 있습니다.