Symfony - загрузка файлов в форме - файл не перемещается из каталога tmp

Может кто-нибудь указать, что мне здесь не хватает? В настоящее время я добавляю файлы в форму, но файл не перемещается из каталога tmp. Я не получаю никаких ошибок, но изображение не копируется и находится в каталоге tmp. Я пробовал устанавливать разрешения на папки с файлами, в которых изображения будут находиться и перемещаться по пути getUploadDir(), но все равно не повезло.

Веб /bundles/bloggerblog имеет символическую привязку. Я думаю, что проблема заключается в пути, который я использую в getUploadDir, использую ли я путь из (src/blogger/blogbundle/Resources/public/images), поэтому он символически связан или использует папку (web/bundles/bloggerblog/images)?

Текущий код:

организация

protected $file;

public function getUploadDir()
{

 return '/bundles/bloggerblog/images';

}

public function getUploadRootDir()
{
 return __DIR__.'/../../../../web/'.$this->getUploadDir();
}

public function getWebPath()
{
 return null === $this->image ? null : $this->getUploadDir().'/'.$this->image;
}

public function getAbsolutePath()
{
 return null === $this->image ? null : $this->getUploadRootDir().'/'.$this->image;
}

/**
 * @ORM\PrePersist()
 * @ORM\PreUpdate()
 */
public function preUpload()
{
 if (null !== $this->file) {
 // Generate a unique name
 $this->image = uniqid().'.'.$this->file->guessExtension();
 }
}

/**
 * @ORM\PostPersist()
 * @ORM\PostUpdate()
 */
public function upload()
{
 if (null === $this->file) {
 return;
 }

 // If there is an error when removing the file, an exception will be automatically thrown by move().
 // This will properly prevent the entity from being persisted to the database on error.
 $this->file->move($this->getUploadRootDir(), $this->image);

 unset($this->file);
}

/**
 * @ORM\PostRemove()
 */
public function removeUpload()
{
 if ($file = $this->getAbsolutePath()) {
 unlink($file);
 }
}

контроллер

public function createAction(Request $request)
{
 $blog = new Blog();

 $form = $this->createFormBuilder($blog)
 ->add('title', 'text')
 ->add('author', 'text')
 ->add('blog', 'textarea')
 ->add('image', 'file')
 ->add('tags', 'text')
 ->add('save', 'submit')
 ->getForm();

 $form->handleRequest($request);
 if ($form->isValid()) {
 $em = $this->getDoctrine()
 ->getManager();
 $em->persist($blog);
 $em->flush();

 // return new Response('Blog was added successfully');
 return $this->redirect($this->generateUrl('BloggerBlogBundle_homepage'));
 }

 $build['form'] = $form->createView();

 return $this->render('BloggerBlogBundle:Blog:create.html.twig', $build);
}

CreateForm

{% extends 'BloggerBlogBundle::layout.html.twig' %}

{% block title %}Add Blog{% endblock %}

{% block body %}
<h2>Add Blog</h2>
{% include 'BloggerBlogBundle:Blog:form.html.twig' with { 'form': form } %}
{% endblock %}

форма

<form action="{{ path('BloggerBlogBundle_blog_create') }}" method="post" {{="" form_enctype(form)="" }}=""><code>
{{ form_widget(form) }}
</code>  </form>
1 ответ

Проблема была в createFormBuilder в контроллере.

Вместо

->add('image', 'file')

Это должно быть

->add('file', 'file', array(
 'label' => 'Image',
 'required' => false
 ))

Тогда все работало как прелесть, довольный тем, что я провел поиски ответа, не напрасно.

licensed under cc by-sa 3.0 with attribution.