file - Symfony4:'data_class' => null 的更新函数问题,我怎样才能保留我的最后一个文件而不将他更新为 null?
问题描述
我创建了一个表单 ProjectForm 来创建/编辑一个带有 Filetype::class 的项目来上传图像。如果我不想更改我的上传文件,他会变为空,因为 'data_class' => null 所以我不知道如何通过我的最后一个文件来改变这个空数据!
我将尝试将我的最后一个文件存储在 var "$lastfile = $project->getCardImg();" 中 但是当我提交表单时,我的 var 会自动变为 null。
我的表格
$builder
->add('title', TextType::class,['required'=> true,'label' => "Titre du nouveau projet"])
->add('content', TextareaType::class,['required'=> true,'label' => "Ensemble du contenu en HTML", 'attr' => ['class' => 'summernote']])
->add('githubLink', UrlType::class,['required'=> false,'label' => "Lien GitHub du projet"])
->add('demoLink', UrlType::class,['required'=> false, 'label' => "Lien de la demo du projet"])
->add('year', TextType::class,['required'=> true, 'label' => "Année de conception du projet"])
->add('technoUses', ChoiceType::class, [
'choices' => [
'html' => 'html',
'css' => 'css',
'javascript' => 'javascript',
'sass' => 'sass',
'symfony' => 'symfony',
],
'multiple' => true,
'expanded' => true,
])
->add('cardImg', FileType::class, ['required'=> false,'label' => 'Image du projet', 'data_class' => null])
->add('description', TextareaType::class,['required'=> true,'label' => "Description du projet"]);
}
我更新项目的功能
/**
* Edition d'un projet
*
* @Route("/admin/project/{id}/edit", name="admin_edit_project")
*
* @return Response
*/
public function editProject(Request $request, ObjectManager $manager, Projects $project){
$form = $this->createForm(ProjectFormType::class, $project);
$form->handleRequest($request);
$lastfile = $project->getCardImg();
dump($lastfile);
if ($form->isSubmitted() && $form->isValid()) {
dump($lastfile);
if($form->get('cardImg')->getData() == null){
$project->setCardImg($lastfile);
}else{
$file = $form['cardImg']->getData();
$fileName = str_replace(' ', '_', $project->getTitle()).'.'.$file->guessExtension();
// Move the file to the directory where brochures are stored
try {
$file->move(
$this->getParameter('img_project'),
$fileName
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$project->setCardImg($fileName);
}
$manager->persist($project);
$manager->flush();
$this->addFlash(
'primary',
'Votre projet a bien était modifié !'
);
return $this->redirectToRoute('admin');
}
return $this->render('admin/project/editProject.html.twig', [
'project' => $project,
'form' => $form->createView()
]);
}
当我更新我的项目时,我希望不会改变我的形象。
解决方案
我认为这应该更好
/**
* Edition d'un projet
*
* @Route("/admin/project/{id}/edit", name="admin_edit_project")
*
* @return Response
*/
public function editProject(Request $request, ObjectManager $manager, Projects $project) {
$lastfile=$project->getCardImg();
$form=$this->createForm(ProjectFormType::class, $project);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
if($project->getCardImg) { //Is either a file or null
/** @var UploadedFile $file */
$file=$project->getCardImg();
//I would suggest to use Ramsey UUID to rename files.
//$fileName=Uuid::uuid1()->toString().'.'.$file->guessExtension();
$fileName=str_replace(' ', '_', $project->getTitle()).'.'.$file->guessExtension();
try {
$file->move($this->getParameter('img_project'), $fileName);
} catch(FileException $e) {
// ... handle exception if something happens during file upload
}
$project->setCardImg($fileName);
} else {
$project->setCardImg($lastfile);
}
//persist isn't needed if you edit.
//$manager->persist($project);
//Where did you init $manager?
//$manager->flush();
$this->getDoctrine()
->getManager()
->flush();
$this->addFlash('primary', 'Votre projet a bien était modifié !');
return $this->redirectToRoute('admin');
}
return $this->render('admin/project/editProject.html.twig', [
'project'=>$project,
'form'=>$form->createView(),
]);
}
推荐阅读
- javascript - 如何递归地更新带有 spit 和 splice 的数组?
- python - Python-Can Bus,只抓取字节?
- python - 我在 sublime text 3 中的文字颜色相同
- c# - 如何从 MC/Bukkit 服务器获取颜色输出以显示在自定义服务器包装器中?
- python - 迭代现有的“for循环”直到收敛
- firebase-realtime-database - 您将如何在实时数据库中实现已读回执和未读排序?
- c# - 需要访问其分配类的扩展方法的动态变量
- multipeer-connectivity - Multipeer Framework iOS 可靠
- json - 如何在 YAML 文件中将 JSON 数据集作为字符串传递?
- angular - PrimeNG - 组织结构图