Symfony2 Doctrine ODM嵌入式表单验证

时间:2012-05-11 15:32:21

标签: symfony doctrine-orm odm

我有一个Doctrine mongodb文档,我已经变成了一个表单。该文档有两个emebedOne文档,这些文档也在表单中。主文档正在验证,但嵌入文档不是。我正在使用自定义断言,但我认为这不重要。

文档

    class AccountRecord{
    /**
     * @MongoDB\Id
     */
    private $id;

    /**
     * @MongoDB\Field(type="BimcoreEmail")
     * @Assert\Email
     * @Assert\NotNull
     * @CustomAssert\BimcoreEmail
     */
    private $email;

    /**
     * Access Admin
     * 
     * @MongoDB\Boolean
     */
    private $access_admin = 0;


    /** @MongoDB\EmbedOne(targetDocument="vidAccountSettings") */
    private $vid;
   }

embeded类自定义断言从不被调用。

/** @MongoDB\EmbeddedDocument */
class vidAccountSettings {
    /**
     * Share section path
     *
     * 
     * @MongoDB\Field(type="Url")
     * @CustomAssert\Url
     */
    private $sharePath;
}

形式

class AccountEditFormType extends AbstractType
{
    /**
     * Builds the embedded form representing the user.
     *
     * @param FormBuilder $builder
     * @param array       $options
     */
    public function buildForm(FormBuilder $builder, array $options){
        $builder
            ->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))
            ;
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'intention'  => 'editAccount',
            'cascade_validation' => true,
        );
    }

    public function getName()
    {
        return 'bimfs_account_creation';
    }



}

处理程序

class AccountEditFormHandler
{
    protected $request;
    protected $userManager;
    protected $form;

    public function __construct(Form $form, Request $request, BimcoreAccountManager $accountManager)
    {
        $this->form = $form;
        $this->request = $request;
        $this->accountManager = $accountManager;
    }

    public function process($account)
    {
        // set the data in the form for the current account.
        $this->form->setData($account);

        if ('POST' === $this->request->getMethod()) {

            $this->form->bindRequest($this->request);
            if ($this->form->isValid()) {
                $this->onSuccess($account);
                return true;
            } else {
            }
        }

        return false;
    }


    protected function onSuccess(BimcoreAccountRecord $account)
    {
        // update the account data.
        $this->accountManager->updateAccount($account);
    }
}

感谢您的帮助。

科里

1 个答案:

答案 0 :(得分:6)

好的,我想出来了,你需要在你要验证的嵌入的记录中设置一个断言有效语句。

/** @MongoDB\EmbedOne(targetDocument="vidAccountSettings") 
    * @Assert\Valid
    */
    private $vid;