1

私は現在、Symfony2の最新バージョンを使用するアプリケーションを開発しています。ファイルアップロードフィールドを含むフォームの検証に問題があります。

私のフォームコードは次のようになります(短縮):

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Validator\Constraints\MinLength;
use Symfony\Component\Validator\Constraints\Collection;

    class EventEditForm extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder->add("name", "text", array("required" => true));
            //....
            $builder->add("image", "file", array("property_path" => false, "required" => false));
        }

        public function getDefaultOptions(array $options)
        {
           $collectionConstraint = new \Symfony\Component\Validator\Constraints\Collection(array(
                'image' => new \Symfony\Component\Validator\Constraints\Image()
                ));

            $options["validation_constraint"] = $collectionConstraint;
            return $options;
        }

        public function getName()
        {
            return 'editeventform';
        }
    }

ここでわかるように、アップロードされたファイルが画像であることを確認したいと思います。私は次のようなフォームを使用します:

$form = $this->createForm(new \Trancefans\AdminBundle\Form\EventEditForm(), $event);

しかし、このコードを実行すると、次のエラーが発生します。

配列型またはTraversableおよびArrayAccessの期待される引数、オブジェクトが指定されました

私は自分のせいがどこにあるのか本当にわかりません。ドキュメントに記載されているとおりに実行しました。誰かが私を助けることができますか?:-)

ところで:画像はイベントエンティティによって表されていませんが、フォームの他のすべてのフィールドは表されています。私は教義を使います。

4

1 に答える 1

0

Symfony\Component\Validator\Constraints\CollectionValidator検証するデータは、ArrayAccess と Traversable を実装する配列またはオブジェクトである必要があります。

$event インスタンスのクラス定義がArrayAccessTraversable を実装していることを確認して、CollectionValidator::validate()が呼び出されたときに値にアクセスして適宜検証できるようにします。

于 2012-05-09T15:40:25.290 に答える