0

私のシステムには、いくつかのユーザー ロールがあるとしましょう: ROLE_ADMIN、ROLE_MODERATOR、ROLE_CUSTOMER_PERSON、ROLE_CUSOMER_COMPANY

また、登録フォームでは、ユーザーがどのロールを持ちたいか (ROLE_CUSTOMER_PERSON と ROLE_CUSOMER_COMPANY の間) を選択できるようにしたいと考えています。

そこでchoice、値 1 と 2 を持つ type フィールドをフォーム クラスに追加しました。悪意のあるユーザーが他のフィールドを選択していないかどうかをチェックする制約を追加できます。しかし、これらの 1 と 2 をどうにかして ROLE_CUSTOMER_PERSON と ROLE_CUSOMER_COMPANY に変換し、addRole メソッドを使用してそれらを割り当てる必要があります。そうしないと、isValid フォーム関数が $roles 配列プロパティで失敗します。

それで、最初の検証 (1 または 2 の場合) とフォームの isValid メソッドが自動的に行われた後に、物事を「翻訳」できるメソッドはありますか?

Request オブジェクトを使用して手動で検証し、それをエンティティに設定して、フォームの残りの部分を検証するだけでよいことはわかっていますが、それは厄介なことであり、フォームを使用するたびにそれを行う必要があります。

何か案は?ありがとう。

4

3 に答える 3

0

RoleType のような smtg というカスタム フォーム タイプを追加する必要があるかもしれません。

これを行う方法は、こちらのドキュメントで確認できます

于 2013-06-25T09:46:14.733 に答える
0

選択フィールドに値を直接渡すことはできませんでしたか?

$builder->add('role', 'choice', ['choices' => [ 'ROLE_CUSTOMER_PERSON' ] ]);

フォームがバインドされると、データ オブジェクトで次のメソッドが呼び出されます。

$user->setRole('ROLE_CUSTOMER_PERSON'); // or addRole

addRoleまた、メソッドが 1 と 2 の値を正しい文字列に変換するのに十分スマートであることも想像できます。

于 2013-06-25T11:39:12.263 に答える
0

あなたはDataTransformerを探しています。

そうでなければ、symfony のフォームイベントの 1 つが発生したときにフォームデータを変換するためにリスナー/サブスクライバーを使用できます。

于 2013-06-25T11:44:56.420 に答える