Symfony2 добавить поле reCaptcha в регистрационную форму
Я пытаюсь добавить EWZRecaptcha в мою регистрационную форму. Моя регистрационная форма builder выглядит примерно так:
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' => 'AcmeMyBundleEntityUser',
);
}
теперь, как я могу добавить ограничение Recaptcha в поле captcha? Я попытался добавить это в проверку.в формате YML:
namespaces:
RecaptchaBundle: EWZBundleRecaptchaBundleValidatorConstraints
AcmeMyBundleEntityUser:
...
recaptcha:
- "RecaptchaBundle:True": ~
но я Property recaptcha does not exists in class AcmeMyBundleEntityUser
ошибка.
если я удалить array('property_path' => false)
из параметров поля recaptcha я получаю ошибку:
Neither property "recaptcha" nor method "getRecaptcha()" nor method "isRecaptcha()"
exists in class "AcmeMyBundleEntityUser"
есть идеи, как его решить? :)
1 ответов
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,
);
}
единственное, что я не знаю об этом методе, - будет ли эта коллекция ограничений объединена с вашим validation.yml
или если он перепишет его.
следует читать в этой статье что объясняет немного более глубокий процесс настройки форм с проверкой для сущностей и других свойств. Он специфичен для MongoDB, но применим к любой доктрине. Следуя этой статье, просто замените его