Symfony2: как загрузить файл без Doctrine?

Я использую 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(.....

В чем проблема??!


person ABS    schedule 21.08.2013    source источник


Ответы (1)


Проблема решена! Я меняю эту строку в MemberType :

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

к этому :

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

Моя ошибка заключалась в том, что я должен объяснить, что поле «pic» не сопоставлено с сущностью (или документом в Mongo, как мой проект). В противном случае ядро ​​Symfony попытается поместить значение «pic» в поле Entity. И у меня нет поля, в котором хранится файл! Я загружаю изображение в каталог и сохраняю только путь к изображению внутри объекта. Когда я изменил это, проблема решилась легко! :-) Так что не забывайте четко объяснять Symfony все!

person ABS    schedule 21.08.2013