4

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

文档

    类帐户记录{
    /**
     * @MongoDB\ID
     */
    私人 $id;

    /**
     * @MongoDB\Field(type="BimcoreEmail")
     * @Assert\电子邮件
     * @Assert\NotNull
     * @CustomAssert\BimcoreEmail
     */
    私人$电子邮件;

    /**
     * 访问管理员
     *
     * @MongoDB\布尔
     */
    私人 $access_admin = 0;


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

嵌入类的自定义断言永远不会被调用。

/** @MongoDB\EmbeddedDocument */
类 vidAccountSettings {
    /**
     * 分享部分路径
     *
     *
     * @MongoDB\Field(type="Url")
     * @CustomAssert\Url
     */
    私人 $sharePath;
}

形式

类 AccountEditFormType 扩展 AbstractType
{
    /**
     * 构建代表用户的嵌入表单。
     *
     * @param FormBuilder $builder
     * @param 数组 $options
     */
    公共函数 buildForm(FormBuilder $builder, array $options){
        $建造者
            ->添加('前缀','隐藏',数组('必需' => false))
            ->add('vid.access', 'checkbox', array('required' => false))
            ->add('vid.googleAnalytics', 'text', 数组('required' => false))
            ->add('vid.liveRail', 'text', 数组('required' => false))
            ->add('vid.sharePath', 'url', 数组('required' => false))
            ;
    }

    公共函数 getDefaultOptions(数组 $options)
    {
        返回数组(
            '意图' => 'editAccount',
            'cascade_validation' => 真,
        );
    }

    公共函数 getName()
    {
        返回“bimfs_account_creation”;
    }



}

处理程序

类 AccountEditFormHandler
{
    受保护的$请求;
    受保护的 $userManager;
    受保护的$form;

    公共函数 __construct(Form $form, Request $request, BimcoreAccountManager $accountManager)
    {
        $this->form = $form;
        $this->request = $request;
        $this->accountManager = $accountManager;
    }

    公共功能流程($account)
    {
        // 为当前账户设置表单中的数据。
        $this->form->setData($account);

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

            $this->form->bindRequest($this->request);
            if ($this->form->isValid()) {
                $this->onSuccess($account);
                返回真;
            } 别的 {
            }
        }

        返回假;
    }


    受保护的功能 onSuccess(BimcoreAccountRecord $account)
    {
        // 更新账户数据。
        $this->accountManager->updateAccount($account);
    }
}

谢谢您的帮助。

科里

4

1 回答 1

7

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

/** @MongoDB\EmbedOne(targetDocument="vidAccountSettings")
    * @Assert\有效
    */
    私人 $vid;
于 2012-05-11T16:20:59.923 回答