Загружаемые расширения доктрины stof - файл не существует

МОЯ ПРОБЛЕМА

Я пытаюсь заставить stof/StofDoctrineExtensionsBundle работать с symfony3. Поэтому вместо использования $form->bind, как указано в примере в документации stof, я попробовал $form->handleRequest. К сожалению, после отправки формы я получаю следующую ошибку:

Файл не существует

Буду благодарен, если подскажете, что я делаю не так. Может быть, кто-нибудь будет так любезен и предоставит мне пример работающих скриптов загрузки?


МОЙ КОД


Код моего контроллера выглядит так:

 public function plikAction(Request $request, $dok_id, $plik_id)
    { 
        $em = $this->getDoctrine()->getManager();
        if($plik_id == "nowy") $plik = new plik();
        /.../
        $form = $this->createForm(plikType::class, $plik);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) 
        {
            if($plik_id == "nowy")
            {
                $em->persist($plik);
                $uploadableManager = $this->get('stof_doctrine_extensions.uploadable.manager');
                $uploadableManager->markEntityToUpload($plik, $plik->getName());
                $em->flush();
                $this->get('session')->getFlashBag()->add('success','Dodano plik ');
            }
            /.../
    }

форма строится с использованием следующей функции:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('oznaczenie')
            ->add('name', FileType::class)
            ->add('wgraj', SubmitType::class);
    }

и мой класс сущности:

/**
 * @ORM\Entity
 * @ORM\Table
  * @Gedmo\Uploadable
 */
class plik
{

    /**
     * @ORM\Column
     * @Gedmo\UploadableFileName
     */
    private $name;

    /*
     * @ORM\Column(type="string", length=100)
     * @Gedmo\UploadableFilePath
     */
     protected $path;

Я использую конфигурацию по умолчанию, как указано здесь https://symfony.com/doc/master/bundles/StofDoctrineExtensionsBundle/index.html.


person Abdel5    schedule 18.02.2016    source источник


Ответы (2)


По умолчанию значение default_file_path равно %kernel.root_dir%/../web/uploads.

Чтобы он работал с конфигурацией по умолчанию,
создайте папку uploads в каталоге web вашего приложения:

mkdir web/uploads    

И сделайте его доступным для записи, установив правильные разрешения в зависимости от пользователя вашего веб-сервера.

Предполагая, что www-data является пользователем веб-сервера, используйте следующее:

chown -R www-data:www-data web/uploads

Или измените права доступа к каталогу с помощью chmod (на свой страх и риск):

chmod -R 755 web/uploads

(в случае, если эти команды должны выполняться от имени пользователя root, добавьте к ним префикс sudo)

Надеюсь, это решит вашу проблему.

person chalasr    schedule 19.02.2016

В моем случае ошибка Symfony3:

Файл не существует

был связан с тем, что PHP не мог записать файл во временную папку из-за ограничений open_basedir.

Поэтому в любом случае, если вы видите эту ошибку в Symfony3, убедитесь, что для папок установлены правильные разрешения и что PHP может записывать в них данные.

person Abdel5    schedule 19.02.2016