【问题标题】:symfony2 forms custom fieldssymfony2 形成自定义字段
【发布时间】:2012-12-08 18:00:47
【问题描述】:

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

除此之外,我还需要能够编辑文章标签。它们作为 ArrayCollection 存储在我的 Blog 实体中。 (ManyToMany 级联:持久化、移除)

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

这也是可能的,并且在这篇食谱文章中有很好的解释:How to Embed a Collection of Forms

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

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

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

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

谁能向我推荐一些文件或给我一些开始信息,我应该从哪里开始我对这个问题的研究?

【问题讨论】:

    标签: forms symfony doctrine


    【解决方案1】:

    插件似乎将其作为逗号分隔的字符串值发送。

    可能最简单的方法是简单地将其视为表单中的单个输入,然后在处理表单时将其拆分。

    // 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 插件最干净和最简单的方法。由于您要将多个项目转换为多个项目,反之亦然,因此需要一些工作,但还不错。

    【讨论】:

    • 为了让它更干净,你可以使用DataTransformers。除了拆分/加入之外,相同的想法对控制器隐藏
    • 谢谢大家,你们让我走上了正轨!我让它工作,明天会在这里发布完整的代码,因为我在网上找不到这样的东西。如果您能发表评论并告诉我我是否在某个地方弄错了,我也将不胜感激,因为我的代码有效,但确实感觉有点 hackish @meze DataTransformers 太棒了,我不敢打开那部分Symfony2 食谱,但一旦我这样做了,我意识到它们根本不难理解概念!非常感谢您提供的信息!
    • 谢谢 meze,我也不知道 DataTransformers 功能。每天学些新东西。 ;)
    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多