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
)。不同之处在于-我不必手动持久化关系的反面
所以这是我的错。无论如何,谢谢。这对我来说不是一个可行的解决方案。上面的代码只是一个示例。实际上,每个子表单都比单个文本字段复杂一些。