6

登録フォームにEWZRecaptchaを追加しようとしています。私の登録フォームビルダーは次のようになります。

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('username',  'text')
            ->add('password')
            ->add('recaptcha', 'ewz_recaptcha', array('property_path' => false));
}

public function getDefaultOptions(array $options)
{
    return array(
            'data_class' => 'Acme\MyBundle\Entity\User',
    );
}

では、キャプチャフィールドにRecaptcha制約を追加するにはどうすればよいですか?これをvalidation.ymlに追加しようとしました:

namespaces:
  RecaptchaBundle: EWZ\Bundle\RecaptchaBundle\Validator\Constraints\

Acme\MyBundle\Entity\User:
  ...
  recaptcha:
    - "RecaptchaBundle:True": ~

しかし、Property recaptcha does not exists in class Acme\MyBundle\Entity\Userエラーが発生します。

array('property_path' => false)reCAPTCHAフィールドのオプションから削除すると、次のエラーが発生します。

Neither property "recaptcha" nor method "getRecaptcha()" nor method "isRecaptcha()"
exists in class "Acme\MyBundle\Entity\User"

それを解決する方法はありますか?:)

4

1 に答える 1

4

Acme\MyBundle\Entity\Userにはプロパティがないため、エンティティrecaptchaでそのプロパティを検証しようとするとエラーが発生します。ドメインオブジェクトに対してこのプロパティを取得/設定しようとしてはならないことをオブジェクトに通知するため、User設定'property_path' => falseは正しいです。Form

Userでは、このフォームのそのフィールドを検証し、エンティティを永続化するにはどうすればよいでしょうか。シンプル-ドキュメントでも説明されています。自分で制約を設定し、それをに渡す必要がありますFormBuilder。最終的には次のようになります。

<?php

use Symfony\Component\Validator\Constraints\Collection;
use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\True as Recaptcha;

...

    public function getDefaultOptions(array $options)
    {
        $collectionConstraint = new Collection(array(
            'recaptcha' => new Recaptcha(),
        ));

        return array(
            'data_class' => 'Acme\MyBundle\Entity\User',
            'validation_constraint' => $collectionConstraint,
        );
    }

このメソッドについて私が知らないことの1つは、この制約コレクションが自分のコレクションとマージされるのか、validation.ymlそれとも上書きされるのかということです。

エンティティやその他のプロパティの検証を使用してフォームを設定するための適切なプロセスについて、もう少し詳しく説明しているこの記事を読む必要があります。これはMongoDBに固有ですが、すべてのDoctrineエンティティに適用されます。termsAcceptedこの記事に従って、そのフィールドを自分のフィールドに置き換えてくださいrecaptcha

于 2012-01-26T20:56:49.423 に答える