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

时间:2016-01-29 13:40:49

标签: php symfony symfony-forms

我的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对象的列表,当我选择一个时,我想显示它存储在我的数据库中并在Entity类中描述的所有属性(如ID,名称等),在不同的html中data- *字段。如果我从列表中选择另一个,我希望在HTML中看到与我新选择的选项相关的所有信息(动态更改)。任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:1)

从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(),
        );
    },
);

答案 1 :(得分:0)

你不能轻易做到这一点。 但您可以在选择标签中添加更多信息。

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

Yout可以在这里添加更多字段详细信息并从您的javascript中获取。