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, но применяется к любой сущности Doctrine. Следуя этой статье, просто замените поле termsAccepted
на поле recaptcha
.