1

有两个实体,CategoryDevice。一个设备可以只与一个类别相关。一个类别可以与许多设备相关。

我使用以下自定义表单类型来创建和编辑设备:

class DeviceFormType extends AbstractType {

    public function buildForm(FormBuilder $builder, array $options) {

        $builder->add('name');
        $builder->add('category', 'entity', array(
            'class' => 'MySupportBundle:Category',
            'property' => 'name'
        ));
    }

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

    public function getDefaultOptions(array $options) {
        return array(
            'data_class' => 'My\SupportBundle\Entity\Device',
        );
    }

}

所以基本上每个设备都有一个名称并分配给一个类别。这工作正常。现在,当我尝试编辑设备并更改类别时,在选择列表中未选择当前类别:

 public function editDeviceAction($id, Request $request) {

        $em = $this->getDoctrine()->getEntityManager();
        $device = $em->getRepository('MySupportBundle:Device')->find($id);

        $form = $this->createForm(new DeviceFormType(), $device);

        $valid = false;

        if ('POST' == $request->getMethod()) {
            $form->bindRequest($request);

            if ($form->isValid()) {
                $device = $form->getData();
                $device->setUpdatedAt(new \DateTime('now'));
                $em->flush();

                return $this->redirect($this->generateUrl('view_shop'));
            } else {
                $valid = true;
            }
        } else {
            $valid = true;
        }

        return $this->render('MySupportBundle:Shop:editDevice.html.twig', array(
                    'form' => $form->createView(),
                    'valid' => $valid,
                    'device' => $device
                ));
    }

任何想法如何将类别设置为选中?

设备:

<entity name="My\SupportBundle\Entity\Device" table="device">   
        <id name="id" type="integer" column="id">
                <generator strategy="AUTO" />
        </id>

        <many-to-one field="category" target-entity="Category"/>

        <field name="name" column="name" type="string" length="255"/>     
</entity>

类别:

<entity name="My\SupportBundle\Entity\Category" table="category">   
    <id name="id" type="integer" column="id">
            <generator strategy="AUTO" />
    </id>

    <one-to-many field="device" target-entity="Device" mapped-by="Device"/>

    <field name="name" column="name" type="string" length="255"/>              
</entity>
4

3 回答 3

1

嗨,我不确定,但您是否在检查一对多和多对一的关系?它们是单向的还是双向的?您可以向我们展示您的设备和类别实体类...

于 2012-09-14T11:03:36.460 回答
1

您正在使用一个名为的自定义存储库方法find()- 取决于您如何重载它, Category可能尚未获取。您可以依赖默认findOneById(int $id)方法。

于 2012-09-14T11:56:32.013 回答
1

最后我自己找到了解决方案。

显然在创建这样的表单视图时

{{ form_widget(form.type)}}

和这样的表格类型

    $builder->add('type', 'entity', array(
        'class' => 'MyBundle:Category',
        'property' => 'name'
    ));

它行不通。因为“类型”是错误的。它必须是“类别”而不是“类型”。很奇怪,但这就是问题所在;)

于 2012-09-20T18:05:35.847 回答