我有映射到(教义持久(实体的形式(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抱怨该实体没有这样的属性(?
我错过了一件事。我加载了夹具,其中包含集合属性中的关联数组数组(tags
此处(。将夹具更改为实体数组(此处为Tag
实例数组(后,我忘记重新加载夹具。
现在一切都完美无缺,所以我需要symfony可以将表单集合映射到array
和关系(ArrayCollection
(。不同之处在于 - 我不必手动保留关系的反面。
所以这是我的错。无论如何,谢谢。
由于array
类型最终将转换为序列化字符串,因此将其映射到集合类型是不合适的。 更好的方法应该是创建一个自定义字段类型,其中getParent
是"文本"并附加一个数据转换器,该转换器会将用户输入转换为数组,反之亦然。检查此说明书条目。