フォームに変換したDoctrinemongodbドキュメントがあります。ドキュメントには2つのemebedOneドキュメントがあり、これらもフォームに含まれています。メインドキュメントは検証されていますが、埋め込みドキュメントは検証されていません。カスタムアサーションを使用していますが、それは問題ではないと思います。
書類
クラスAccountRecord{ / ** * @MongoDB \ Id * / プライベート$id; / ** * @MongoDB \ Field(type = "BimcoreEmail") * @ Assert \ Email * @ Assert \ NotNull * @ CustomAssert \ BimcoreEmail * / プライベート$email; / ** *アクセス管理者 * * @MongoDB \ Boolean * / private $ access_admin = 0; / ** @MongoDB \ EmbedOne(targetDocument = "vidAccountSettings")* / プライベート$vid; }
埋め込みクラスこれに対するカスタムアサーションが呼び出されることはありません。
/ ** @MongoDB \ EmbeddedDocument * / クラスvidAccountSettings{ / ** *共有セクションパス * * * @MongoDB \ Field(type = "Url") * @ CustomAssert \ URL * / プライベート$sharePath; }
形
クラスAccountEditFormTypeはAbstractTypeを拡張します {{ / ** *ユーザーを表す埋め込みフォームを作成します。 * * @param FormBuilder $ builder * @param array $ options * / パブリック関数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)) ; } パブリック関数getDefaultOptions(array $ options) {{ 配列を返す '意図'=>'editAccount'、 'cascade_validation' => true、 ); } パブリック関数getName() {{ 'bimfs_account_creation'を返します。 } }
ハンドラ
クラスAccountEditFormHandler {{ 保護された$request; 保護された$userManager; 保護された$form; public function __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); trueを返します。 } そうしないと { } } falseを返します。 } 保護された関数onSuccess(BimcoreAccountRecord $ account) {{ //アカウントデータを更新します。 $ this-> accountManager-> updateAccount($ account); } }
助けてくれてありがとう。
コーリー