Php Symfony表单类型实体数据转换项

Php Symfony表单类型实体数据转换项,php,symfony,Php,Symfony,我有字段类型为entity的表单,在这个字段上我有query\u builder,它返回查询和'property'=>'name',。我的问题是,在数据转换器中需要做什么来更改选择名称,需要复杂的几个字段,例如名称、地址、办公室。使用Symfony 2.8,我需要dataTransformer方法 我的表格 class OutBoundInvoiceRowType extends AbstractType { /** * @var array */ private $vatClasses;

我有字段类型为
entity
的表单,在这个字段上我有
query\u builder
,它返回查询和
'property'=>'name',
。我的问题是,在数据转换器中需要做什么来更改选择名称,需要复杂的几个字段,例如名称、地址、办公室。使用Symfony 2.8,我需要dataTransformer方法

我的表格

class OutBoundInvoiceRowType extends AbstractType
{
/**
 * @var array
 */
private $vatClasses;

/**
 * @var Container
 */
private $container;

/**
 * @var EntityManager
 */
private $em;

/**
 * OutBoundInvoiceRowType constructor.
 * @param Container $container
 * @param $vatClasses
 */
public function __construct(
    Container $container,    
    $vatClasses
) {
    $this->container = $container;
    $this->vatClasses = $vatClasses;
    $this->em = $this->container->get('doctrine.orm.entity_manager');
}

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('location', 'entity', array(
            'class' => Location::class,
            'property' => 'name',
            'empty_value' => 'Choice Location',
            'query_builder' => self::getLocations(),
            'required' => false
        ))          
        ->add('vat', ChoiceType::class, [
            'choices' => ?,
            'required' => true,
        ])
    $builder->get('vat')
        ->addModelTransformer(new VatTransformer($this->container));
}
还有我的变压器:

class VatTransformer implements DataTransformerInterface
{
    /**
     * @var Container
     */
    private $container;

    /**
     * @var EntityManager
     */
    private $em;

    /**
     * LocationTransformer constructor.
     * @param Container $container
     */
    public function __construct(Container $container)
    {
        $this->container = $container;
        $this->em = $this->container->get('doctrine.orm.entity_manager');
    }

    /**
     *
     * @param  Location|null $issue
     * @return string
     */
    public function transform($issue)
    {
        if (null === $issue) {
            return '';
        }
    }
}
在函数转换中
$issue
null
且返回时
'
形式没有变化,仍然有
'property'=>'name',
可供选择,在数据转换名称中需要做什么

这个我现在有了

这就是我需要的

需要几个部件的名称

更新


嗯。我有选择字段
vat
,我需要在vat字段的选择中生成数据,如-从某个实体字段,示例实体位置(id,名称)


这是如何通过dataTransformer实现的

在实体中实现一个
\uuu toString()
方法,该方法将返回所需的名称


然后从
QueryBuilder
中删除属性,这将导致类的
to_string()
方法的自动使用。

好的,thnks,但我需要使用dataTransform,因为在这个转换器中我想添加一些逻辑数据转换器可能不是正确的解决方案。你真正想要实现的是什么?你用的是什么symfony版本。同时检查和选项。Symfony 2.8我需要数据转换器方法目前,您的问题中没有任何内容表明您需要数据转换器。只需将
choice\u标签
与回调一起使用,就会产生相同的结果。因此,请添加您认为需要数据转换器的原因。现在看来你只是想使用它,因为你不知道如何解决你的实际问题。我有选择字段
vat
,我需要在vat字段的选择中生成数据,例如-从某个实体字段,例如实体位置(id,名称),这是如何通过dataTransformer实现的?因此,您希望根据用户在
位置
中选择的内容填充
vat
的值?如果是这样的话,有一个教程正好说明了这一点: