私はPropelBundleでSymfony 2.1フォームを使用しています。オブジェクトのドロップダウンリストを持つフォームをリファクタリングして、jqueryのオートコンプリートフィールド(AJAXで作業する)を代わりに使用しようとしています。ドロップダウンリストについては、私は自分のフォームタイプで(ドロップダウンのために完璧に働いていた)次のコードを使用していました:Propelを使って、コレクションのためのSymfony2フォームにオートコンプリートフィールドを追加するには?
$builder->add('books', 'collection', array(
'type' => 'model',
'options' => array(
'class' => 'MyVendor\MyBundle\Model\Book',
'property' => 'title',
),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'required' => false,
));
少しコンテキストを与えるために、我々は新しい「リーダーを作成しているとしましょう利用可能な「書籍」オブジェクトのリストからReaderのお気に入りの書籍を選択したいと考えています。コレクションタイプは、新しい「リーダー」フォームで多くの「お気に入りの書籍」を選択できるように使用されます。今、私はオートコンプリートを使用するために上記を変更したいと思います。そのために、the answer to this Questionに示されているブックIDを渡すオートコンプリート機能に使用できるData Transformer to be able to get a Book object from a simple text fieldを実装しようとしました。しかし、私はData Transformerをコレクション型とPropelクラスで動作させる方法を理解することができませんでした。私はsymfonyのクックブックに示されているようにBookToIdTransformerクラスを作成し、「ReaderType」ファイルに次のように試してみました。以上により
$transformer = new BookToIdTransformer();
$builder->add(
$builder->create('books', 'collection', array(
'type' => 'text',
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'required' => false,
))->addModelTransformer($transformer)
);
、私は「未定義のメソッドの呼び出し:のgetId」を得る例外を(明らかに変圧器を想定してい単一のブックオブジェクトではなく、ブックのPropelCollection)。誰もそれについて行く方法を知っていますか?あるいは、Propelを使ってSymfonyでオートコンプリートを実装し、複数のオブジェクト(例えば、書籍のコレクション)を選択できる他の方法があるかどうか教えてください。
徹底的な説明をありがとう。 JSONレスポンスを返さなければならないコントローラのアクションがたくさんある場合は、FOSRestBundle – Narretz
のビュー/フォームのスニペットを追加できますか? – timaschew
@timaschew私がよく覚えていれば(私はそれを必要としなくなりました)、ビュー内のコードはsymfonyフォームに使用されている標準的なものです。フィールドは通常のテキスト入力です。オートコンプリート機能は、入力のIDを使用してjavascriptを使用してTokeninputプラグインによってその入力に追加されます:$( "#my-text-input")tokenInput( "/ url/to/your/script /"); – RayOnAir