0

それで、ブログ記事を編集するためのフォームがあります。

とりわけ、記事のタグを編集できるようにする必要があります。それらは、ブログ エンティティ内に ArrayCollection として保存されます。(ManyToMany カスケード: 永続化、削除)

現在、Simfony はこのタイプのデータを<select>タグ付きで処理し、選択には問題なく機能しますが、タグの削除と追加もできるようにしたいと考えています。

これも可能であり、このクックブックの記事で非常によく説明されています:フォームのコレクションを埋め込む方法

ただし、このチュートリアルの結果はまだあまり洗練されていないため、StackOverflow タグ ボックスに似た入力ボックスが欲しいです。

無料ライセンスの下で既に多くのソリューションが実行されているため、たとえばjQuery Tags Inputなど、そのうちの 1 つだけを使用することにしました。

基本的に、$('#tags_input_box').tagsInput() を実行するだけで、SO のようなタグ ボックスに変換されます。

現在、カスタムメイドの入力をフォームにバインドし、残りの「本物の」フィールドと一緒に Symfony2 が理解できる形で送信する最も簡単な方法を探しています

どなたかドキュメントを参照していただけますか、またはこの問題に関する調査をどこから始めればよいかについての開始情報を教えていただけますか?

4

1 に答える 1

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 プラグインを使用して行う最もクリーンで簡単な方法です。複数のアイテムを多数に、またはその逆に変換しているため、少し作業が必要ですが、それほど悪くはありません.

于 2012-12-08T22:00:54.633 に答える