4

当我在 Symfony2 中创建实体字段时,如何指定生成的选择选项字段的值?

这是我的实体字段的片段:

->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>
4

4 回答 4

2

如果您创建一个“实体”字段,您将在两个实体之间创建一个关系表单,因此默认字段值是您的实体上的 id 注释字段。您可以使用 View Transformer 更改此行为。查看此文档: http ://symfony.com/doc/current/cookbook/form/data_transformers.html#model-and-view-transformers

于 2013-09-18T12:47:48.663 回答
2

还寻找了相同的解决方案并在这里找到了它:表单中实体字段类型的不同属性

只需在字段类型选项中设置属性并为该属性创建一个 getter,该属性将字符串格式化为输出标签的方式。

于 2014-02-26T16:02:50.767 回答
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();
于 2016-01-11T11:54:08.473 回答
0

在您的控制器中进行此更改,

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery('SELECT u FROM MyBundle:Language u ORDER BY u.id DESC');
$data = $query->getResult();
于 2016-05-04T11:02:17.943 回答