web-dev-qa-db-ja.com

symfony 2:エンティティではなくカスタムフォーム要素を追加します

Symfony2を使用していて、登録フォームを作成したいと考えています。 FOSUserBundleを使いたくありません。

そこで、エンティティアカウント(フィールド:ユーザー名、パスワード、電子メール...)を作成し、フォームを作成します。

 $account = new Account();

$form = $this->createFormBuilder($account)
  ->add('username',         'text', array('label' => 'Nom de compte :'))
  ->add('password',    'password', array('label' => 'Mot de passe :'))
  ->add('email',            'email', array('label' => 'Adresse email :'))
  ->getForm();

次に、パスワードの確認フィールドを追加します。しかし、「password_confirmation」などのadd()メソッドでフィールドを追加しようとすると、次のようになります。

プロパティ「password_confirmation」もメソッド「getPasswordConfirmation()」もメソッド「isPasswordConfirmation()」もクラス「App\FrontBundle\Entity\Account」に存在しません

カスタムフィールドを追加するにはどうすればよいですか?そして、それを有効にする方法は?

ありがとうございました。 BR。

32
Thomas K

通常の状況では、 property_path オプションを使用して、* password_confirmation *がエンティティの一部ではないことを明示的に指定する必要があります。

->add('password_confirmation', 'password', array('property_path' => false))

そして、それを CallBackValidator で検証します。

しかし、この特定のケースでは、フィールドを繰り返したい場合、 繰り返し ウィジェットがそれを行います。

->add('password_confirmation', 'repeated', array(
    // See the docs :)
));
51
Samy Dindane

Symfony 2.1の更新:

property_pathは廃止されました。代わりに mapped を使用してください。構文は同じです:

->add('password_confirmation', 'password', array('mapped' => false))
65
Squazic