2016-06-20 2 views
0

Я использую Symfony3.1, и я только что установил VichUploaderBundle. Я следовал документации, но я получаю эту ошибку означает, что Поле «имя_образа» не может быть пустым (NULL)VichUploaderBundle: image_name не может быть пустой ошибкой

SQLSTATE [23000]: Integrity нарушение ограничения: 1048 Le Champ «имя_образа» пе Peut être смотри (нуль)

Config

vich_uploader: 
db_driver: orm 
mappings: 
    product_image: 
     uri_prefix:   /images/actualites 
     upload_destination: kernel.root_dir/../web/images/actualites 

     inject_on_load:  false 
     delete_on_update: true 
     delete_on_remove: true 

предприятие

/** 
* 
* @Vich\UploadableField(mapping="actualite_image", fileNameProperty="imageName") 
* 
* @var File 
*/ 
private $imageFile; 

/** 
* @ORM\Column(type="string", length=255) 
* 
* @var string 
*/ 
private $imageName; 

/** 
* @ORM\Column(type="datetime") 
* 
* @var \DateTime 
*/ 
private $updatedAt; 

/** 
* @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image 
* 
* @return Actualite 
*/ 

public function setImageFile(File $image = null) 
{ 
    $this->imageFile = $image; 

    if ($image) { 
     // It is required that at least one field changes if you are using doctrine 
     // otherwise the event listeners won't be called and the file is lost 
     $this->updatedAt = new \DateTime('now'); 
    } 

    return $this; 
} 

/** 
* @return File 
*/ 
public function getImageFile() 
{ 
    return $this->imageFile; 
} 

/** 
* @param string $imageName 
* 
* @return Actualite 
*/ 
public function setImageName($imageName) 
{ 
    $this->imageName = $imageName; 

    return $this; 
} 

/** 
* @return string 
*/ 
public function getImageName() 
{ 
    return $this->imageName; 
} 

FormType:

->add('imageFile', FileType::class) 

прут

<form class="form-horizontal" method="post" enctype="multipart/form-data"> 
//... 
{{ form_widget(form.imageFile) }} 

Действие

public function creerAction(Request $request) 
{ 
    $entity = new Actualite(); 
    $form = $this->createForm(BaseType::class, $entity); 
    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($entity); 
     $em->flush(); 

     return $this->redirectToRoute('backend_actualite_liste'); 
    } 

    return $this->render('Backend/Actualite/creer.html.twig',array(
      'form' => $form->createView(), 
     ) 
    ); 
} 
+0

Где код, создающий эту ошибку. Вы показываете Entity выше, но нам, вероятно, нужно увидеть код контроллера или код формы, в котором вы загружаете. Можете ли вы отредактировать свой пост и отправить этот код, пожалуйста? –

+0

@AlvinBunk Я отредактировал мое сообщение – hous

ответ

1

Таким образом, на самом деле в соответствии с тем, что HOUS заявил, что это изменение требуется в файл app/config/config.yml:

vich_uploader: 
    db_driver: orm 
    mappings: 
     actualite_image: 
      uri_prefix:   /images/actualites 
      upload_destination: kernel.root_dir/../web/images/actualites 

Примечание для жилищных: Вам не нужны эти последние 3 опции в файле config.yml, поскольку они по умолчанию

0

Так же, как примечание, есть разные Symfony3 setup here, которые могут быть полезны.

Я думаю, что для вашей установки это отличается для Symfony3. Попробуйте это:

->add('imageFile', VichImageType::class, array(
    'required'  => false, 
)) 

Кроме того, вам нужно это изменение тоже:

# app/config/config.yml 
twig: 
    form_themes: 
     # other form themes 
     - 'VichUploaderBundle:Form:fields.html.twig' 
+0

Ошибка в том, что имя сопоставления загрузки в конфигурации и имя сопоставления в сущности разные, но они должны быть одинаковыми. В конфигурационном файле есть product_image, а в сущности - actualite_image. Теперь я даю им то же имя, и теперь он работает хорошо. – hous

1

Решенные

Ошибка в том, что имя отображение загрузки в конфигурации и имя отображения в сущность различна, но они должны быть одинаковыми.

В конфигурационном файле находится product_image и в сущности является actualite_image.

Теперь я даю им то же имя, и теперь он работает хорошо.

Смежные вопросы