2013-11-26 2 views
1

У меня есть объект Product и вы хотите отобразить список продуктов (из базы данных) на странице и после этого получить выбранный объект в контроллере.Как получить объект на контроллере в 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'; 
    } 
} 

Twig шаблона:

<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() для доступа к идентификатору продукта.

Смежные вопросы