2017-01-27 7 views
0

私は解決できなかったTYPO3オブジェクト検証に問題があります。単純化のためにはのは、私が関係して、オブジェクトAとBを持っているとしましょうについて<から1:N - > B.私のExtbaseオブジェクトは作成時にのみ検証されますが、更新時には検証されません

オブジェクトAは、モデルで@validate NotEmptyをマークされているいくつかのプロパティを持っており、これがあれば正常に動作しますフォームを使用してAの新しいインスタンスを作成します(検証エラーが生成され、フィールドにはcssエラークラスが追加されます)。

オブジェクトが既に存在し、標準の編集/更新構造を使用してそれを変更した場合、検証は完全に無視されているように見え、@ invalidate NotEmptyとマークされているプロパティのオブジェクトは空の値で保持できます。

私は、オブジェクトAとBの他の関係(Bはその親にリンクしています)に接続する可能性があるという疑いがあります。検証中にすべての子オブジェクトも検証されますすべてのリレーションプロパティに@ignorevalidationというアノテーションを付けました。

この動作をデバッグするために何かできますか? Extbaseが子オブジェクトや関係プロパティを介して接続されたオブジェクトを検証するのを防ぐ方法はありますか?

答えて

2

私はこの問題をTYPO3 6.2から知っています。私はまだ7.6+に存在していると思います。私はあなたに役立つかもしれないこの行動についてのドイツの記事を書いた。 http://blog.teamgeist-medien.de/2016/02/typo3-extbase-validierung-von-unterobjekten-deaktivieren.html

要約:初期化アクションでは、バリデータを変更して特定の属性から削除することができます。

public function initializeCreateAction() { 
    if ($this->arguments->hasArgument('newPosten')) { 
     /** @var \TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator */ 
     $conjunctionValidator = $this->arguments->getArgument('newPosten')->getValidator(); 
     // REMOVES ALL VALIDATORS! MODIFY TO MAKE IT MORE SPECIFIC! 
     foreach ($conjunctionValidator->getValidators() as $validator) { 
      $conjunctionValidator->removeValidator($validator); 
     } 
    } 
} 
+0

答えてくれてありがとうPaul。私は実際にあなたの記事をここに掲載する前に見つけました。そして、私が経験しているものに近いと思われます。あなたのコードスニペットを使ってどのようなバリデータが生成されているかを確認しました。実際には、バリデーターに加えて、すべてのリレーショナルプロパティを明示的に注釈したものがCollectionValidatorまたはConjunctionValidatorでチェックされます。この問題は、すべてのプロパティバリデータを削除することができますか、またはnone ...プロパティバリデータを削除するメソッドがないようです。私はオブジェクトのConjunctionValidatorを完全に削除することしかできませんでした。 – mrwienh

+0

私はまた、フォームの選択に応じて動的検証を使用するための記事でこれを説明しました。私はそれが醜いと思うが、バリデータなしでサブオブジェクトとの関係で新しいモデルを作成し、この "プロキシ"モデルのConjunctionValidatorを取得して、initialize-Acitonsのリクエストにバインドすることができます。参照:http://blog.teamgeist-medien.de/2015/05/typo3-extbase-dynamische-validierung-von-models-je-nach-formularauswahl.html –

関連する問題