1

これをGenemuフォームバンドルで使用しています

add('users', 'genemu_jqueryautocompleter_entity', array(
'route_name' => 'ajax_user',
'class' => Acme'\UserBundle\Entity\OldUser',
'multiple' => true,
'required' => false
))

https://github.com/genemu/GenemuFormBundle/blob/master/Resources/doc/jquery/autocomplete/entity_ajax.md

用途を複数選択することができ、データは問題なく内部に入力されます。しかし、 textbox 全体を削除しても、値はデータベースに残ります。削除できないようです。彼らはOKを入力しますが、更新されません。

オートコンプリートなしで通常の複数選択を使用すると、すべて問題ありません

編集:

つまり、SO で質問をして、入力中にタグを選択するときと同じです。次に、テキストを削除してタグを削除できます。私の場合、入力中にユーザーを追加できますが、文字を削除してもユーザーは削除されません。隠しフィールドで、彼らはまだそこにいます

4

2 に答える 2

0

それらを削除できるように、エンティティ プロパティ (ユーザー)に配置しようとしorphanRemoval=trueましたか?

http://docs.doctrine-project.org/en/2.0.x/reference/working-with-associations.html#orphan-removalの詳細orphalRemoval

于 2012-09-13T15:03:43.523 に答える
0

これはgenemuBundleのバグだと思います。私が見ることができるのは、値を変更すると、実際の入力で値が変更されることです (GEnemu バンドルの JavaScript によって非表示になります)。ただし、入力内の値を削除しても、何も変更されないため、古い値が残ります。 .

フォームを送信すると、古い値が送信されるため、実際には削除できません。

それを解決する正しい方法は、javascript を改善し、実際の非表示入力の値を空白に設定することです。genemuBundle はそれを処理する必要がありますが、彼らが修正するまで待っている間、次のようなことができます。

$("#autocompleter_name_input").change(function(){
    if($("#autocompleter_name_input").val()==""){
        $("#name_input").val("");
    }   
}); 

(私はそれを試しませんでしたが、私はこの他の回避策を行っています。また、これは単一の場合であり、複数選択の場合ではないため、これは少し複雑になります...)

回避策として、コントローラーでリクエストを処理できます。

Genemu は、ユーザーが文字どおりに入力した内容も要求に送信します。したがって、 $request->request->all() に次のようなものを含める必要があります。

Array
(
   [your_entity_name] => Array
      ( all the fields, even with the old values)
   [autocompleter_your_entity_name] => Array
      ( what the user actually input)
)

それを使用して、フォームの検証をさらに追加し、コントローラーのエンティティで必要なことを何でも行います。

完全な回答にならず、回避策を提供して申し訳ありません...

于 2014-06-11T08:34:48.220 に答える