4

フォームに変換した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);
    }
}

助けてくれてありがとう。

コーリー

4

1 に答える 1

7

わかりました。これを理解しました。検証する埋め込みのレコードにassertvalidステートメントを設定する必要があります。

/ ** @MongoDB \ EmbedOne(targetDocument = "vidAccountSettings")
    * @ Assert \ Valid
    * /
    プライベート$vid;
于 2012-05-11T16:20:59.923 に答える