フォームに変換した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);
}
}
助けてくれてありがとう。
コーリー