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;
Другие вопросы по тегам