1

我有表格 ( AbstractType) 映射到一个(教义坚持的)实体。

该实体有一个属于教义类型的字段array

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

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

考虑这个(教义坚持的)实体:

class Article
{
   ...
    /**
     * @ORM\Column(type="array")
     */
    protected $tags;   
   ...
}

而这个实体(不受教义管理):

class Tag
{
   ...
    public $name;
   ...
}

而这种形式类型:

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

在文件中:

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

甚至可以在不编写自己的字段类型的情况下做我想做的事吗?

更新:也许我应该改写我的问题:我如何告诉 symfony 不要将此字段映射到任何内容(如果我更改其名称 symfony 抱怨该实体没有这样的属性)?

4

2 回答 2

2

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

现在一切都完美无缺,所以ineed symfony 可以将一个表单集合映射到一个array和一个关系(ArrayCollection)。不同之处在于 - 我不必手动保留关系的反面。

所以这是我的错。不管怎么说,还是要谢谢你。

于 2012-05-08T13:34:32.287 回答
0

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

于 2012-05-07T20:23:58.763 回答