我有一个已经变成表格的 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); } }
谢谢您的帮助。
科里