【问题标题】:How to get entity at the controller in symfony2如何在 symfony2 的控制器中获取实体
【发布时间】:2025-12-11 11:00:01
【问题描述】:

我有一个产品实体,希望在页面上显示产品列表(来自数据库),然后在控制器中获取选定的实体。

产品类型:

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() 中获取选定的产品? 也许我做错了,这不是最好的解决方案?

【问题讨论】:

    标签: php symfony entities


    【解决方案1】:

    不清楚你是否已经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-&gt;get('products')-&gt;getData()-&gt;getId()访问产品ID。

    【讨论】:

      最近更新 更多