Symfony2 Doctrine ODM嵌入类表单验证

4
我有一个Doctrine mongodb document,我已经将其转换成一个表单。该文档有两个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; }
嵌入式类上的自定义断言从未被调用。
/** @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) { //为当前账户设置表单数据 $this->form->setData($account);
if ('POST' === $this->request->getMethod()) {
$this->form->bindRequest($this->request); if ($this->form->isValid()) { //处理成功则调用onSuccess函数进行更新操作并返回true $this->onSuccess($account); return true; } else { //处理失败则返回false } }
return false; }
//更新账户记录 protected function onSuccess(BimcoreAccountRecord $account) { $this->accountManager->updateAccount($account); } }

感谢您的帮助。

Cory

1个回答

7

好的,我弄清楚了,你需要为您想要验证的嵌入式记录设置一个assert valid语句。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接