1

私のフォームはuploadsコレクション型を使用しています。コレクションの各要素は次のUploadTypeとおりです。

class MultiUploadType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('uploads', 'collection', array(
            'type' => new UploadType(), // This should be validated
            'allow_add' => true,
        ));

        $builder->add('Save', 'submit');
    }
}

JavaScript を使用して新しいアップロードを追加できますが、検証が機能しません。ここ (ここここ、またはここ)で多くの質問を読みましたが、まだ解決策が見つかりません。

アップロードの種類は次のようになりますが、フォームには対応する種類のエンティティがあるためUpload(ファイルを空白にすることはできません) 、検証は YAML を使用して定義されます。

class UploadType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('file', 'file');
        $builder->add('description', 'textarea');
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'required' => false,
            'data_class' => 'App\Entity\Upload'
        ));
    }
}

検証コード:

App\Entity\Upload:
  properties:
    file:
      - NotBlank:
          message: Occorre selezionare un file.
      - File: ~
4

1 に答える 1

4

コメントの議論から:

はい、基本的に各フォームにはデータ クラスが必要です。エンティティである必要はありません。単純なモデル クラスで十分です。したがって、検証を適用できます。埋め込みフォームを検証するにはValidassert が必要で、コレクションの場合も同じですが、オプションを使用しますtraverse: true

于 2013-09-12T19:37:07.640 に答える