0

所以,我有一个用于编辑博客文章的表格。

除其他外,我需要能够编辑文章标签。它们作为 ArrayCollection 存储在我的 Blog 实体中。(多对多级联:坚持,删除)

现在,Simfony 使用标签处理这种类型的数据,<select>它可以很好地选择,但我也希望能够删除和添加标签。

这也是可能的,并且在这篇食谱文章中得到了很好的解释:如何嵌入表单集合

但是,本教程的结果仍然不是很优雅,我希望有类似于 StackOverflow 标签框的输入框。

由于在免费许可下有许多已经完成的解决方案,我决定只使用其中一个,例如jQuery Tags Input

基本上,我需要做的就是运行 $('#tags_input_box').tagsInput() 并将其转换为类似 SO 的标签框。

现在,我正在寻找最简单的方法来将一些自定义输入绑定到我的表单,并将其与其他“真正”字段一起提交回 Symfony2 可以理解的形状

任何人都可以向我推荐一些文件或给我一些开始信息,我应该从哪里开始我对这个问题的研究?

4

1 回答 1

0

It appears that plugin sends it in as a comma-separated string value.

Probably the easiest way would be to simply treat it as a single input in your form, and then split it up when you process the form.

// 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.
    }
}

That's probably the cleanest and simplest way to do it using that jQuery plugin. Takes a bit of working around since you are turning multiple items into many and vice versa, but not too bad.

于 2012-12-08T22:00:54.633 回答