所以,我有一个用于编辑博客文章的表格。
除此之外,我还需要能够修改文章标记。它们作为ArrayCollection存储在我的Blog实体中。 (ManyToMany级联:持久,删除)
现在,Simfony使用<select>
标签处理这类数据,它可以很好地进行选择,但我希望能够删除和添加标签。
这也是可能的,并且在本食谱文章How to Embed a Collection of Forms
中得到了很好的解释然而,本教程的结果仍然不是很优雅,我希望有类似于StackOverflow标签框的输入框。
由于许多已经在免费许可下完成的解决方案我决定只使用其中一个,例如jQuery Tags Input。
基本上,我需要做的就是运行$('#tags_input_box')。tagsInput()并将其转换为类似SO的标签框。
现在,我正在寻找将一些自定义输入绑定到我的表单的最简单方法,并将其与其他“正版”字段一起提交回来,形状将被Symfony2理解
有人可以向我推荐一些文件,或者给我一些开始信息,我应该开始研究这个问题吗?
答案 0 :(得分:0)
看起来插件以逗号分隔的字符串值发送它。
最简单的方法可能是简单地将其视为表单中的单个输入,然后在处理表单时将其拆分。
// Entity to hold it in string form.
namespace Some\Entity;
class TagStringEntity {
protected $tagString;
// getTagString and setTagString
}
// Custom form type.
// Use this AbstractType in your form.
namespace Some\Form;
Symfony\Component\Form\AbstractType;
class TagType extends AbstractType {
public buildForm(FormBuilder $builder, array $options) {
$builder->add('tagString'); // will default to text field.
}
}
// In Controller
public function displayFormAction() {
// Join the tags into a single string.
$tagString = implode(',', $article->getTags()); // assuming it returns an array of strings.
$tagStringType = new TagStringType();
$tagStringType->setTagString($tagString);
// build form, etc...
}
public function checkFormAction() {
// ...
if ($form->isValid()) {
// Get the tag string, split it, and manually create your separated tag objects to store.
}
}
使用该jQuery插件可能是最干净,最简单的方法。需要做一些工作,因为你将多个项目变成了许多项目,反之亦然,但也不是太糟糕。