Php 如何映射symfony2';s表单集合字段到条令';s数组类型字段?

Php 如何映射symfony2';s表单集合字段到条令';s数组类型字段?,php,forms,symfony,doctrine,Php,Forms,Symfony,Doctrine,我有一个表单(AbstractType),它映射到一个(持久化的)实体 该实体拥有一个属于条令类型数组的字段 根据symfony的文档,应该可以将表单集合字段映射到PHP的数组,但是当表单映射到实体时,显然不起作用。Symfony希望该字段是一个关系,但它只是一个数组 这不是实际代码,只是一个示例: 考虑一下这个实体: 以及该实体(不受条令管理): 此表单类型: class ArticleType extends AbstractType { public function buildF

我有一个表单(
AbstractType
),它映射到一个(持久化的)实体

该实体拥有一个属于条令类型
数组
的字段

根据symfony的文档,应该可以将表单集合字段映射到PHP的
数组
,但是当表单映射到实体时,显然不起作用。Symfony希望该字段是一个关系,但它只是一个
数组

这不是实际代码,只是一个示例:

考虑一下这个实体:

以及该实体(不受条令管理):

此表单类型:

class ArticleType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('tags', 'collection', array('type' => new TagType()));
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => '\Entity\Article',
        );
    }
}
class TagType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('name', 'text');
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => '\Entity\Tag',
        );
    }
}
标签的表单类型:

class ArticleType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('tags', 'collection', array('type' => new TagType()));
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => '\Entity\Article',
        );
    }
}
class TagType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('name', 'text');
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => '\Entity\Tag',
        );
    }
}
当试图实例化ArticleType原则时,会有如下抱怨:

Expected argument of type "\Entity\Tag", "array" given
存档:

第47行的vendor/symfony/src/symfony/Component/Form/Extension/Core/DataMapper/PropertyPathMapper.php

甚至可以在不编写自己的字段类型的情况下执行我想要的操作吗


更新:也许我应该重新表述我的问题:我如何告诉symfony不要将此字段映射到任何对象(如果我更改其名称symfony抱怨实体没有此类属性)?

以及
数组
类型最终将转换为序列化字符串,将其映射到集合类型是不合适的。更好的方法应该是创建一个自定义字段类型,其中
getParent
是“text”,并附加一个数据转换器,将用户输入转换为数组,反之亦然。检查食谱条目。

我遗漏了一件事。我加载了装置,其中包含集合属性中的关联数组(
tags
here)。在将装置更改为实体数组(此处为
标记数组
实例)后,我忘记了重新加载装置

现在一切都完美无瑕,因此ineed symfony可以将表单集合映射到
数组和关系(
ArrayCollection
)。不同之处在于-我不必手动持久化关系的反面


所以这是我的错。无论如何,谢谢。

这对我来说不是一个可行的解决方案。上面的代码只是一个示例。实际上,每个子表单都比单个文本字段复杂一些。