【发布时间】:2014-12-28 22:51:06
【问题描述】:
我正在使用tagsinput 的表单上使用标签:
这个插件以一个包含用逗号分隔的标签的文本字段结束(例如:tag1、tag2、...)
这些标签目前在一个非映射的表单域上管理:
$builder
// ...
->add('tags', 'text', array(
'mapped' => false,
'required' => false,
))
;
最后,它们存储在一个 ArrayCollection 中,如 this is a bad practice to store multiple values in a database field:
/**
* @var ArrayCollection[FiddleTag]
*
* @ORM\OneToMany(targetEntity="FiddleTag", mappedBy="fiddle", cascade={"all"}, orphanRemoval=true)
*/
protected $tags;
要将我的表单映射到我的实体,我可以在我的控制器中执行一些代码,如下所示:
$data->clearTags();
foreach (explode(',', $form->get('tags')->getData()) as $tag)
{
$fiddleTag = new FiddleTag();
$fiddleTag->setTag($tag);
$data->addTag($fiddleTag);
}
但乍一看,这似乎是错误的方式。
我想知道将我的实体映射到我的表单并将我的表单映射到我的实体的最佳做法是什么。
【问题讨论】:
标签: php forms symfony arraycollection