Bonjour,
Dans une entité Photo, j'ai cette contrainte sur la propriété file :
/**
* @var File
* @Assert\Image(
* mimeTypes = {"image/jpeg"},
...
Au niveau de Xampp, dans les fichiers php.ini, php.ini-developpement et php-ini-production, la ligne
extension=fileinfo
n'est pas commentée.
Malgré cela, au moment de l'encodage, dans le contrôle de type file, je peux insérer autre chose que du jpeg : aucun message d'erreur n'est affiché et le tout est bien enregistré en base de données.
Quelqu'un aurait une idée sur la manière de résoudre ce problème?
Merci d'avance pour votre aide.
Bonjour,
Merci pour votre intérêt.
Comme demandé, voici mon contoller qui va être prochainement retravaillé de part la future utilisation de VichUploadBundle :
/**
* @Route("/admin/advert.photos/management/{id}", name="admin.advert.photos.management")
* @param Advert $advert
* @param Request $request
* @param ObjectManager $manager
* @return Response
*/
public function photosForm(Advert $advert, Request $request, ObjectManager $manager, CacheManager $cacheManager) {
$photos = $advert->getPhotos();
$numberOldPhotos = count($photos);
$recordedPhotos = array();
$recordedPhotosNames = array();
$oldPhotos = array();
$editMode = false;
if ($numberOldPhotos > 0)
{
$editMode = true;
$recordedPhotos = $advert->getPhotos();
foreach ($recordedPhotos as $recordedPhoto) {
$recordedPhotosNames[] = $recordedPhoto->getName();
$oldPhotos[] = clone $recordedPhoto;
}
}
$form = $this->createForm(PhotosAdvertType::class, $advert);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$photos = $advert->getPhotos();
$numberPhotos = $photos->count();
$checkedMain = 0;
if ($numberPhotos > 0)
{
foreach ($photos as $photo)
{
if ($photo->getMainPhoto())
{
$checkedMain++;
}
// If no file is set, doing nothing
if ((null !== $photo->getFile()) && ($photo->getFile() instanceof UploadedFile))
{
$photo->setName(md5(uniqid()) . '.' . $photo->getFile()->guessExtension());
try
{
$photo->getFile()->move($this->getParameter('photos_directory'), $photo->getName());
}
catch (FileException $e)
{
$error = new FormError("Les photos n'ont pas pu être enregistrées");
$form->addError($error);
}
if($photo->getName() !== null && ($photo->getFile() instanceof UploadedFile))
{
$photo->setAdvert($advert);
}
}
}
}
if ($numberPhotos > 0 && $checkedMain == 0)
{
$error = new FormError("Au moins une photo doit être cochée comme étant à afficher dans la liste des annonces");
$form->addError($error);
}
elseif ($checkedMain > 1)
{
$error = new FormError("Il ne peut y avoir qu'une photo cochée comme étant à afficher dans la liste des annonces");
$form->addError($error);
}
//Deleting photos not used anymore
if ($numberOldPhotos > 0)
{
$stringDeletedPhotos = substr($form->get('deletedPhotos')->getData(), 0, -1);
$deletedPhotos = explode(";", $stringDeletedPhotos);
if(count($deletedPhotos) > 0)
{
foreach ($oldPhotos as $oldPhoto)
{
if (in_array($oldPhoto->getName(), $deletedPhotos))
{
$idOldPhoto = $oldPhoto->getId();
$photoToDelete = $this->getDoctrine()->getRepository( Photo :: class )->find( $idOldPhoto );
$advert->removePhoto($photoToDelete);
}
}
}
}
$manager->persist($advert);
$manager->flush();
if ($editMode)
{
$this->addFlash('success', 'Les photos ont été modifiées avec succès.');
}
else
{
$this->addFlash('success', 'Les photos ont été ajoutées à votre annonce avec succès.');
}
return $this->redirectToRoute('admin.advert.periods.management', array('id' => $advert->getId()));
}
return $this->render('admin/advert/photos.html.twig', ['form' => $form->createView(),
'recordedPhotosNames' => $recordedPhotosNames,
'editMode' => $numberOldPhotos > 0
]
)
;
}