У меня есть несколько компаний, где есть поле для логотипа.Моя идея на странице редактирования заключается в том, что если в форме редактирования поле будет пустым, сохранится логотип, который у нас был ранее в БД, потому что это обязательное поле.
Моя идея состояла в том, чтобы получить данные формы, которые должны быть отправлены ранее, и проверить, является ли поле пустым, чтобы получить данные из базы данных для их обновления.Я использовал 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 (), данные равны нулю.
Результат с прослушивателем дампа и изображением после отправки