質問

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

ShoppingListForm
ShoppingListItemForm

ShoppingListItemformをShoppingListformの内部に何度も埋め込んでいます。つまり、買い物リストには多くのアイテムが含まれています。

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

item_id (checkbox) 
shopping_list_id (hidden - foreign key)

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

この削除がどのように発生するかわかりませんか? Post Balidatorを使用して、どのフィールドがチェックされていないかを確認しますか?私はこれに少し迷っています。

役に立ちましたか?

解決

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

他のヒント

個人的には、既存のリスト項目をループして、対応するチェックボックスがアクションでチェックされているかどうかを確認し、 delete() そうではないアイテムの方法。私はそれがポストバリデーターの目的ではないと思います、私はこれをアクションで直接行います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top