当我在Symfony2中创建实体字段时,如何指定生成的select选项字段的值?
这是我的实体字段的片段:
->add('preferred_language', 'entity', array(
'mapped' => false,
'property' => 'name',
'class' => 'Common\MainBundle\Entity\Language',
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.id', 'DESC');
}
实际上我可以通过属性指定显示的值,它会自动获取引用db表的id。好。相反,我能做些什么呢?我想改变期权价值吗?
<option value="my_value">my_property</option>
答案 0 :(得分:2)
如果创建“实体”字段,则在两个实体之间创建关系表单,因此默认字段值是实体上的id annoted字段。 您可以使用View Transformer更改此行为。看看这个doc: http://symfony.com/doc/current/cookbook/form/data_transformers.html#model-and-view-transformers
答案 1 :(得分:2)
也寻找相同的解决方案并在此处找到:different property for entity field type in form
只需在字段类型选项中设置属性,然后为属性创建一个getter,以便按字符串格式输出标签。
答案 2 :(得分:1)
我通过以下方式解决了它:
FormType中的代码必须相同:
->add('preferred_language', 'entity', array(
'mapped' => false,
'property' => 'name',
'class' => 'Common\MainBundle\Entity\Language',
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.id', 'DESC');
}
在控制器中,我使用DQL获取数据:
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery('SELECT u FROM MyBundle:Language ORDER BY u.id DESC');
$data = $query->getResult();
我通过渲染方法传递数据:
return $this->render('MyBundle:Default:page.html.twig',
array('formulario' => $formulario->createView(),
'data' => $data));
在twig文件中,我创建了一个<select>
项,其ID为“myproject_mybundle_myformtype_ preferred_language ”:
<select id="myproject_mybundle_myformtype_preferred_language" name="aeneagrama_adminbundle_itemcontenidotype[preferred_language]" class="form-control">
<option value="0">-- Choose an option --</option>
{% for item in data %}
<option value="{{ item.your_column }}">{{ item.name }}</option>
{% endfor %}</select>
最后,当您从表单中获取输入数据时,您可以在控制器中获取它:
$form->get('preferred_language')->getData();
答案 3 :(得分:0)
在您的控制器中进行此更改,
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery('SELECT u FROM MyBundle:Language u ORDER BY u.id DESC');
$data = $query->getResult();