在 Formbuilder::add() 中配置 EntityType 时访问 class 的属性和方法

Access properties and methods of a class while configuring EntityType in Formbuilder::add()

我的 Symfony2 表单中有一个下拉列表,如下所示:

$builder->add('categories','entity', array(
            'class'     => 'MyBundle:Myentity',
            'property'  => 'name',
            'label'     => 'Mylabel',
            'expanded'  => false,
            'multiple'  => false,
            'label_attr'   =>  array ( 'class'      => 'control-label' ),
            'attr'   =>  array  (   'class'         => 'form-control',
                                    'placeholder'   => 'Placeholder',
                                    'title'         => "Mytitle",
                                    'data-toggle'   => 'tooltip',
                                    'data-myidfromDB'   => '????',
                                    'data-mynamefromDB'=>'????' etc. )));

所以我得到了一个 MyBundle:Myentity 对象的列表,当我选择一个对象时,我想显示它的所有属性(如 ID、名称等),这些属性存储在我的数据库中并在实体 class,在不同的 html data-* 字段中。如果我 select 列表中的另一个,我想在 HTML 中查看与我新 selected 选项相关的所有信息(动态更改)。有什么想法吗?

你不能简单地做到这一点。 但是您可以在 select 标签中添加更多信息。

看看 http://symfony.com/doc/current/reference/forms/types/entity.html#choice-label

您可以在此处放置更多字段详细信息并从您的 javascript 中获取。

从 Symfony 2.7 开始,您可以将选项 choice_attr 设置为 ChoiceType 并将其设置为可调用的,接收选择作为参数。

EntityType 继承了这个选项,在那种情况下选择的是实例化的实体,所以你可以这样写:

$builder->add('categories','entity', array(
    'class' => 'MyBundle:MyEntity',
    'property' => 'name',
    'label' => 'Mylabel',
    'attr' => array('class' => 'form-control'),
    'label_attr' => array('class' => 'control-label'),
    'choice_attr' => function (\AppBundle\Entity\MyEntity $myEntity) {
        return array(
            'data-private-property' => $entity->getPrivateProperty(),
            'data-some-value' => $entity->someMethod(),
        );
    },
);