2016-06-20 69 views
0

我正在使用Symfony3.1,並且我剛剛安裝了VichUploaderBundle。 我都跟着文檔,但我得到這個錯誤意味着字段「IMAGE_NAME」不能爲空(NULL)VichUploaderBundle:image_name不能爲空錯誤

SQLSTATE [23000]:完整性約束違規:1048樂冠軍「IMAGE_NAME或者」 ne peut理由韋迪(空)

配置

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

產生此錯誤的代碼在哪裏?您上面顯示了實體,但我們可能需要查看控制器代碼或表單代碼,以便您上傳。你能編輯你的文章併發布該代碼嗎? –

+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 

注到HOUS:你並不需要在config.yml文件的最後3個選項,因爲它們是默認的

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

現在我給他們同樣的名字,它現在很好用。