2

私には2つのSymfonyフォームがあります:

ShoppingListForm
ShoppingListItemForm

ShoppingListItemFormをShoppingListForm内に何度も埋め込んでいます。つまり、ショッピングリストには多くのアイテムが含まれています。

したがって、ShoppingListItemFormは2つのウィジェットで構成されます。

item_id (checkbox) 
shopping_list_id (hidden - foreign key)

オブジェクトが存在し、チェックボックスがオフのままになっている場合は、対応するShoppingListItemオブジェクトを削除します。

この削除がどのように行われるかわかりませんか?ポストバリデーターを使用して、チェックされている/チェックされていないフィールドを確認しますか?私はこれに少し迷っています。

4

2 に答える 2

4

これを行うには、ShoppingListForm の updateObject メソッドをオーバーライドし、カスタムの delete() などの呼び出しをそこに配置します (必ずその中で parent::updateObject() を呼び出してください)。

実装方法によっては、埋め込まれたフォームとその値を削除して、残りのオブジェクトの保存が正しく機能するようにする必要がある場合もあります。なしで試してください。ただし、そうする場合は、次をクリアする必要があります。

unset($taintedValues['ShoppingListItem'][$key]);
unset($this->embeddedForms['ShoppingListItem'][$key]);
unset($this->validatorSchema['ShoppingListItem'][$key]);
unset($taintedFiles['ShoppingListItem'][$key]);

カスタムの updateObject メソッドを表示して、値の操作方法などを知りたい場合は、次のようにします。

http://www.symfony-project.org/forms/1_2/en/11-Doctrine-Integration#chapter_11_sub_customizing_the_updateobject_method

于 2010-08-18T09:11:39.177 に答える
0

個人的には、既存のリスト項目をループして、対応するチェックボックスがアクションでチェックされているかどうかを確認し、チェックされてdelete()いない項目に対してメソッドを呼び出します。投稿バリデーターの目的ではないと思います。アクションで直接これを行います。

于 2010-08-18T08:32:21.477 に答える