私の Symfony2 アプリケーションには、主にエンティティの永続化に使用されるフォームがありますが、ファイルをアップロードするために使用されるマップされていないフィールドを 1 つ追加しました。このフィールドは、その後処理されて削除されます。ただし、この追加フィールドを検証する方法がわかりません。
buildForm()
ここでは、フォーム クラスのメソッドで定義されています。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text', array('label' => 'Name'))
// ...
->add('data', 'file', array(
'label' => 'CSV Data File',
'mapped' => false,
'required' => false,
));
}
最初に、このフィールドの検証をバンドルのvalidation.yml
ファイルに追加しようとしましたが、このフィールドはエンティティの一部ではないため、エラーが発生しました。
My\Bundle\Entity\MyEntity:
properties:
data:
- File:
maxSize: 1024k
mimeTypes: text/*
mimeTypesMessage: Please upload a CSV file
私の次の試みは、フォームクラス自体に制約を追加することでしたが、オブジェクトではなく、この方法でのみ配列を検証できるようです。これは、主にエンティティに関連付けられているためだと思います。
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$collectionConstraint = new Collection(array(
'data' => new File(array(
'maxSize' => '1024k',
'mimeTypes' => 'text/*',
'mimeTypesMessage' => 'Please upload a CSV file',
)),
));
$resolver->setDefaults(array(
'data_class' => 'My\Bundle\Entity\MyEntity',
'constraints' => $collectionConstraint,
));
}
ドキュメントから、余分なフィールドを単独で検証するために使用できるように見えますが$this->get('validator')->validateValue();
、フォーム全体を一度に検証し、マップされていないフィールドに関連するエラーをフィールド自体とともに表示したいと思います。
誰にもアイデアはありますか?