【发布时间】:2019-02-14 17:53:55
【问题描述】:
我有一些公司,其中有一个徽标字段。我在编辑页面中的想法是,如果在编辑表单中,该字段为空,保留我们之前在数据库中的徽标,因为这是一个必填字段。
我的想法是获取之前要提交的表单的数据并检查该字段是否为空以从数据库中获取数据以使用它进行更新。我使用了eventListener,但是当数据提交时,它不会改变为null。我对这个 symfony 版本几乎是新手,但我无法做到这一点。你可以帮帮我吗。谢谢,
/**
* @Route("/admin/companies/edit/{id}", name="edit_company")
* Method({"GET", "POST"})
*/
public function editCompany(Request $request, $id){
$company = new Company();
$company = $this->getDoctrine()->getRepository(Company::class)->find($id);
$form = $this->createFormBuilder($company)
->add('name', TextType::class, array('attr' => array('class' => 'form-control')))
->add('description', TextAreaType::class, array('attr' => array('class' => 'form-control summernote')))
->add('telephone', TextType::class, array('attr' => array('class' => 'form-control')))
->add('city', TextType::class, array('attr' => array('class' => 'form-control')))
->add('web', UrlType::class, array('attr' => array('class' => 'form-control')))
->add('image', FileType::class, array('data_class' => null, 'label' => false, 'required' => false, 'attr' => array('class' => 'form-control d-none')))
->add('save', SubmitType::class, ['label' => 'Edit Company', 'attr' => array('class' => 'btn btn-success p-2 mt-5')])`enter code here`
->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
$data = $event->getData();
$form = $event->getForm();
$image = $data['image'];
if ($image == null){
$company_tmp = $this->getDoctrine()->getRepository(Company::class)->find($form->getData()->getId());
$data['image'] = $company_tmp->getImage();
$event->setData($data);
}
})
->getForm();
$form->handleRequest($request);
if ( ($form->isSubmitted()) && ( $form->isValid() ) ){
$company = $form->getData();
$file = $form->get('image')->getData();
if ($file !== null){
$fileName = 'company-'.$this->generateUniqueFileName().'.'.$file->guessExtension();
// Move the file to the directory where brochures are stored
try {
$moved = $file->move( $this->get('kernel')->getProjectDir() . '/public/uploads', $fileName );
} catch (FileException $e) {
throw new HttpNotFoundException("Page not found");
}
$company->setImage($fileName);
}
$entityManager= $this->getDoctrine()->getManager();
$entityManager->flush();
$flashbag = $this->get('session')->getFlashBag();
$flashbag->add("success", "Company Edited Correctly");
return $this->redirectToRoute('companies_list');
}
return $this->render('admin/edit_company.html.twig',
array(
'form' => $form->createView(),
'company' => $company,
)
);
}
例如,如果之前要保存的图片名称是company122121.jpg,而编辑表单数据为空,则将company122121.jpg保存在数据库中。但结果始终为空。我已经检查了侦听器上的 $event->getData() 并且数据是正确的,但是当我在 isSubmitted() 之后获取数据时,数据为空。
【问题讨论】:
标签: php symfony symfony-3.4