パート1
これを行うには、データ トランスフォーマーを使用して次の 2 つのことを行う必要があります。
- エンティティを文字列または整数のいずれかの識別子に変換して、フォームが非表示フィールドとしてレンダリングできるようにします。
- フォームの送信時に文字列または整数の識別子をエンティティに変換して、親エンティティを正しい関係で保存できるようにする
上でリンクした symfony のドキュメント (こちらも) は、フォームでデータ トランスフォーマーを使用する例全体を実際に説明しています。
恥知らずなプラグインとして (役立つと信じているため)、エンティティ ID を持つ非表示フィールドにデータ トランスフォーマーを使用するための小さなチュートリアルを書きました: http://lrotherfield.com/blog/symfony2-forms-entity-as-隠しフィールド/
パート2
データ トランスフォーマーを使用している場合は、悪意のあるユーザーについて心配する必要はありません。偽の ID からカテゴリを逆変換できないため、データ トランスフォーマーは失敗します。私のチュートリアルでは、トランスフォーマーはSymfony\Component\Form\Exception\TransformationFailedException例外をスローします。
フォームにエラーを表示したい場合に、送信されたカテゴリが本物であることを確認する必要がある場合は、(コールバックを使用する可能性がある)バリデータを作成することもできます。外部キー制約が失敗するため、Doctrine は偽のカテゴリ関係を永続化することを許可しません。