Symfony2 Doctrine ODM включил проверку формы класса
У меня есть документ Doctrine mongodb, который я превратил в форму. Документ имеет два документа emebedOne, которые также находятся в форме. Основной документ проходит проверку, а документы для встраивания - нет. Я использую пользовательские утверждения, но я не думаю, что это должно иметь значение.
Документ
class AccountRecord{ /** * @MongoDB\Id */ приватный $id; /** * @MongoDB\Field(type="BimcoreEmail") * @Assert\Email * @Assert\NotNull * @CustomAssert\BimcoreEmail */ личная электронная почта; /** * Access Admin * * @MongoDB\Boolean */ private $access_admin = 0; /** @MongoDB\EmbedOne(targetDocument="vidAccountSettings") */ private $vid; }
Внедренный класс пользовательского утверждения на это никогда не вызывается.
/ ** @MongoDB \ EmbeddedDocument * / class vidAccountSettings { / ** * Поделиться разделом пути * * * @MongoDB\Field(type="Url") * @CustomAssert\Url */ private $sharePath; }
форма
Класс AccountEditFormType расширяет AbstractType { /** * Создает встроенную форму, представляющую пользователя. * * @param FormBuilder $ builder * @param array $options * / публичная функция buildForm (FormBuilder $ builder, массив $options){ $ строитель ->add('prefix', 'hidden', array('required' => false)) ->add('vid.access', 'checkbox', array('required' => false)) ->add('vid.googleAnalytics', 'text', array('required' => false)) ->add('vid.liveRail', 'text', array('required' => false)) ->add('vid.sharePath', 'url', array('required' => false)); } публичная функция getDefaultOptions(массив $ options) { возвращаемый массив ('desire' => 'editAccount', 'cascade_validation' => true,); } публичная функция getName() { return 'bimfs_account_creation'; } }
обработчик
Класс AccountEditFormHandler { защищенный запрос $; защищенный $userManager; защищенная форма $; публичная функция __construct(форма $form, запрос $request, BimcoreAccountManager $accountManager) { $this->form = $form; $this->request = $request; $this->accountManager = $accountManager; } процесс публичной функции ($account) { // установить данные в форме для текущего счета. $ This-> форма-> УстановитьДанные ($ счета); if ('POST' === $this->request->getMethod()) { $ This-> форма->bindRequest($this-> запрос); if ($this->form->isValid()) { $ This-> OnSuccess($ счета); вернуть истину; } еще { } } вернуть ложь; } защищенная функция onSuccess(BimcoreAccountRecord $account) { // обновить данные аккаунта. $ This->accountManager->updateAccount($ счета); } }
Спасибо за помощь.
Cory
1 ответ
Решение
Хорошо, я понял, что вам нужно установить в запись утверждение assert valid для встраиваний, которые вы хотите проверить.
/ ** @MongoDB \ EmbedOne (targetDocument = "vidAccountSettings") * @Assert \ Valid * / private $ vid;