有两个实体,类别和设备。设备可以与一个类别相关。类别可以与许多设备相关。
我使用以下自定义表单类型来创建和编辑设备:
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>
答案 0 :(得分:1)
您好我不确定,但您是否正在检查一对多和多对一的关系?它们是单向还是双向的?您可以向我们展示您的设备和类别实体类......
答案 1 :(得分:1)
您正在使用名为find()
的自定义存储库方法 - 根据您重载的方式,可能未提取Category
。您可以依赖默认的findOneById(int $id)
方法。
答案 2 :(得分:1)
最后我自己找到了一个解决方案。
显然在创建这样的表单视图时
{{ form_widget(form.type)}}
以及像这样的表单类型
$builder->add('type', 'entity', array(
'class' => 'MyBundle:Category',
'property' => 'name'
));
它不起作用。因为“类型”是错误的。它必须是“类别”而不是“类型”。很奇怪,但这是问题;)