2017-01-02 11 views
0

私は内部にコレクションサブフォームを持つフォームを持っています。サブフォームには、属性 "resourceId"のchoiceTypeフィールドがあります。そのデータはajaxによってSelect2 jsプラグインによって生成されます(そのデータはリソースタイプを選択する別の選択肢に依存するため)。私はジャバスクリプトによって、フィールドのデフォルト値を追加する必要があるため(Pre Submitイベント中にChoiceTypeトランスを削除する

transformationFailure: TransformationFailedException {#4328 ▼ 
    #message: "Unable to reverse value for property path "resourceId": The choice "bd922d35fb828da6e39edf3c7927511c9a6be025" does not exist or is not unique" 

これが原因である:私はすでにRESOURCEIDの選択に値を持っている特定の場合には

、私は私のフィールドを検証することはできませんありがとうSelect2)。

フィールドの検証をキャンセルする必要がありますが、BuildFormメソッドでResetViewTransformers()を使用しても、PreSubmitイベントでフィールドを再構築しても、まだ検証されません。

TL; DR:PreSubmitイベント中の検証をキャンセルするにはどうすればよいですか? (できるだけ私のフィールドにのみ)

答えて

0

解決策を見つけた:

$("#myform").validate({ 
    ignore: ".ignore, :hidden" 
}) 

は隠しは、他の理由でaffacted、その後の参照、エラーを与えることはありません、あなたが任意のフィールドは非表示にしていることを確認します。私は間違った方向に行きました。

私がしなければならなかったすべては、新しいクラスを使用し、その後、ChoiceTypeクラスをオーバーライドしてViewTransformersを無効にした

class NonTransformedChoiceType extends ChoiceType 
    { 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 
     $builder->resetModelTransformers(); 
     $builder->resetViewTransformers(); 
    } 
} 
-1

いくつかのjqueryを追加し、特定のフォームフィールドに.ignoreクラスを追加します。フォーム全体をロードする場合は、別々にロードすることをお勧めします。そうすれば、簡単に追加できます。 here

+1

働いていません。この問題は、JavascriptでもHTMLでもなく、Symfonyの検証から来ています。 – Mouke

関連する問題