Мульти загрузки файлов на symfony2.8

я делал мульти загрузки файлов на symfony2.8, и я всегда нахожу проблемы,
и я всегда получал это:
«Ожидаемый аргумент типа» строка «,» массив «задан»

это моя сущность /Article.php

<?php

namespace RoubBundle\Entity;

use Symfony\Component\HttpFoundation\File\File;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\UploadedFile;/**
* Article
*
* @ORM\Table(name="article")
* @ORM\Entity(repositoryClass="RoubBundle\Repository\ArticleRepository")
*/
class Article
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @ORM\Column(type="string", nullable=true)
*
* @Assert\File(
*      maxSize="5242880",
*      mimeTypes = {
*          "image/png",
*          "image/jpeg",
*          "image/jpg",
*          "image/gif"*      }
* )
*/
public $image= array();

/**
* @ORM\Column(type="string")
* @var string
*/
private $titre;

public function getTitre()
{
return $this->titre;
}

public function setTitre($titre)
{
$this->titre = $titre;

return $this;
}public function getImage() {
return $this->image;
}
public function setImage(array $image) {
$this->image = $image;
}

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}

и это мое действие NewAction в моем контроллере /ArticleController.php

public function newAction(Request $request)
{
$article = new Article();
$form = $this->createForm('RoubBundle\Form\ArticleType', $article);
$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
if (null !== $article->getImage) {
foreach($file as $article->getImage) {

/** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */
$file = $article->getImage();

$fileName = md5(uniqid()).'.'.$file->guessExtension();

$file->move(
$this->getParameter('images_directory'),
$fileName
);

array_push($article->getImage(), $fileName);
}
}
$em = $this->getDoctrine()->getManager();
$em->persist($article);
$em->flush();

return $this->redirectToRoute('article_show', array('id' => $article->getId()));
}

return $this->render('RoubBundle:article:new.html.twig', array(
'article' => $article,
'form' => $form->createView(),
));
}

это форма /ArticleType.php

    public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('titre')
->add('image', 'file', array(
'required' => false,
'data_class' => null,
"multiple" => "multiple"))
;
}

и я попробую это в моей ветке /new.html.twig

    {{ form_start(form) }}
{{ form_widget(form.titre) }} </br>
{{ form_widget(form.image, { 'attr': { 'multiple': 'multiple' } }) }}
</br>
<input type="submit" value="Create" />
{{ form_end(form) }}

ребята, я хотел бы, чтобы кто-то мог мне помочь, я очень переживаю об этом
и благодарю вас.

0

Решение

Ваша проблема в том, что $ image имеет тип string в вашей сущности:

@ORM\Column(type="string", nullable=true)

Поэтому вам нужно сначала выяснить, как вы хотите сохранить список изображений в вашей базе данных. Хороший способ сделать это — создать новую таблицу (и Entity) с именем article_images, которая выглядит следующим образом:

$id
$imageUrl
$articleId

Если вам не нужна другая таблица, вы можете попытаться сохранить массив изображений в формате json. Для этого используйте

 @ORM\Column(type="json")

на вашем поле изображения $.

Вторая проблема — ваш «движущийся» код. Вы помещаете значения в конец массива, а вам нужны только «перемещенные». Вот как это может выглядеть:

 if ($article->getImage()) {

$movedImages = array();

foreach($article->getImage() as $index=>$file) {

$fileName = md5(uniqid()).'.'.$file->guessExtension();

$file->move(
$this->getParameter('images_directory'),
$fileName
);

array_push($movedImages, $fileName);
}

$article->setImage($movedImages);
}
$em = $this->getDoctrine()->getManager();
$em->persist($article);
$em->flush();

return $this->redirectToRoute('article_show', array('id' => $article->getId()));
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]