0

製品とカテゴリ (Symfony 2.3) の 2 つのエンティティがあります。

ユーザーが最初にカテゴリを選択して製品を選択できるフォームを作成したいと考えています。ユーザーが画像をクリックしてカテゴリを選択し、画像の値を非表示の入力に設定したいのですが、外部エンティティの選択リストを非表示の入力に変更する方法がわかりません ( http://symfony.com /doc/current/reference/forms/types/entity.html )。

  1. どうすればこれを達成できますか? (フォーム入力を非表示に変更する方法)
  2. カスケード検証を true に設定すると、たとえば、カテゴリが実際に存在するかどうかがチェックされます。(悪意のある利用者による、存在しないカテゴリーの商品の出品を防ぐため)?
4

1 に答える 1

2

パート1

これを行うには、データ トランスフォーマーを使用して次の 2 つのことを行う必要があります。

  • エンティティを文字列または整数のいずれかの識別子に変換して、フォームが非表示フィールドとしてレンダリングできるようにします。
  • フォームの送信時に文字列または整数の識別子をエンティティに変換して、親エンティティを正しい関係で保存できるようにする

上でリンクした symfony のドキュメント (こちらも) は、フォームでデータ トランスフォーマーを使用する例全体を実際に説明しています。

恥知らずなプラグインとして (役立つと信じているため)、エンティティ ID を持つ非表示フィールドにデータ トランスフォーマーを使用するための小さなチュートリアルを書きました: http://lrotherfield.com/blog/symfony2-forms-entity-as-隠しフィールド/

パート2

データ トランスフォーマーを使用している場合は、悪意のあるユーザーについて心配する必要はありません。偽の ID からカテゴリを逆変換できないため、データ トランスフォーマーは失敗します。私のチュートリアルでは、トランスフォーマーはSymfony\Component\Form\Exception\TransformationFailedException例外をスローします。

フォームにエラーを表示したい場合に、送信されたカテゴリが本物であることを確認する必要がある場合は、(コールバックを使用する可能性がある)バリデータを作成することもできます。外部キー制約が失敗するため、Doctrine は偽のカテゴリ関係を永続化することを許可しません。

于 2013-07-03T13:45:03.703 に答える