5

Symfony2.3 を使用しています。私はこのようなフォームを持っています:

<form action="{{ path("member_update") }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form.pic) }}
    ...
    {{ form_widget(form._token) }}
</form>

ディレクトリにユーザーの写真をアップロードしたい.次に、コントローラーでこれを使用します:

$member , $form , $dm is defined...

if ($form->isValid()) {
        // Handle profile picture upload process
        $uploadDir=dirname($this->container->getParameter('kernel.root_dir')) . '/web/bundles/mybundle/myfiles';
        $form['pic']->getData()->move($uploadDir,$member->getId());
        // End of upload

        $dm->persist($member);
        $dm->flush();
        return $this->redirect($this->generateUrl("member_profile"));
    }

動作するはずですが、次のエラーが表示されます。

Exception: Serialization of 'Symfony\Component\HttpFoundation\File\UploadedFile' is not allowed

1. in pathToMyProject...\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\DataCollector\DataCollector.php line 27
2. at serialize(.....

どうしたの??!

4

1 に答える 1

5

問題は解決しました!MemberType のこの行を変更します。

$builder->add('pic','file');

これに:

$builder->add('pic','file', array('mapped'=>false));

私の間違いは、「pic」フィールドがエンティティ(または私のプロジェクトのMongoのドキュメント)にマップされていないことを説明する必要があるということでした。それ以外の場合、Symfony カーネルは "pic" の値を Entity のフィールドに入れようとします。そして、ファイルを保持するフィールドがありません! 写真をディレクトリにアップロードし、エンティティ内の写真へのパスのみを保存します。これを変更すると、問題は簡単に解決しました!:-) Symfony にすべてのことを明確に説明することを忘れないでください!

于 2013-08-21T19:26:54.900 に答える