0

我对 EWZRecaptcha Bunlde (dev-master) 和 symfony 2.1.0 有疑问。reCaptcha 显示正确,图像发生变化,所以我认为配置没问题。但是 reCaptcha 没有经过验证,提交后$form->getErrorsAsString()说:这个表单不应该包含额外的字段。

好吧,我认为额外的字段是recaptcha_challenge_fieldrecaptcha_response_fieldreCaptcha 发送的,但我认为我错过了文档中某些内容,所以它们有什么问题?

对于验证,我使用文档中的代码:(我也尝试了替代方法,那里提到了)

use EWZ\Bundle\RecaptchaBundle\Validator\Constraints as Recaptcha;
//...
/**
* @Recaptcha\True
*/
public $recaptcha;
//...

在配置中:

framework:
    validation: { enable_annotations: true }

我添加了这样的字段:

$builder->add('recaptcha', 'ewz_recaptcha', array(
                'property_path' => false,
                'attr' => array(
                    'options' => array(
                        'theme' => 'clean'
                    )
                )
));

也许我忘记了一些重要的东西,文档中没有提到?

4

2 回答 2

0

终于找到了解决办法!
为了摆脱extra fields我在表单类中添加了这两个字段:

$builder->add('recaptcha_challenge_field', 'hidden', array('property_path' => false));
$builder->add('recaptcha_response_field', 'hidden', array('property_path' => false));

然后验证适用于:

use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\True;
...
'constraints'   => array(
                    new True()
                )

注释对我不起作用

use EWZ\Bundle\RecaptchaBundle\Validator\Constraints AS Recaptcha;
...
/**
 * @Recaptcha\True
 */
public $recaptcha;
于 2013-01-11T15:53:50.507 回答
0

可能尝试向构建器添加“约束”选项。我的 recaptcha builder 添加如下所示:

    $builder->add('recaptcha', 'ewz_recaptcha', array(
                        'attr'          => array(
                            'options' => array(
                                'theme' => 'red'
                            )
                        ),
                        'label' => "Verification",
                        'property_path' => false,
                        'constraints'   => array(
                            new True()
                        ),
                        'help' => "Enter the words in the box for verification purposes."
                    ));

因此,为约束添加一个“使用”语句:

use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\True;

然后添加约束选项:

'constraints'   => array(
    new True()
),
于 2013-01-10T19:26:33.650 回答