<?php
namespace App\EventSubscriber;
use ApiPlatform\Symfony\EventListener\EventPriorities;
use App\Entity\MediaObject;
use App\Service\ImageConverter;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
final class MediaObjectUploadSubscriber implements EventSubscriberInterface
{
private ImageConverter $imageConverter;
public function __construct(ImageConverter $imageConverter)
{
$this->imageConverter = $imageConverter;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::VIEW => ['convertToWebP', EventPriorities::PRE_WRITE],
];
}
public function convertToWebP(ViewEvent $event): void
{
$mediaObject = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$mediaObject instanceof MediaObject || Request::METHOD_POST !== $method) {
return;
}
// Utiliser le getter
$uploadedFile = $mediaObject->getFile();
if (!$uploadedFile instanceof UploadedFile) {
return;
}
// Convertir l'image en WebP
$result = $this->imageConverter->convertToWebP($uploadedFile);
if ($result) {
[$webpFile, $originalName] = $result;
$newFileName = $originalName . '.webp';
// Créer un nouvel UploadedFile avec le fichier WebP
$newUploadedFile = new UploadedFile(
$webpFile->getPathname(),
$newFileName,
'image/webp',
null,
true // test mode
);
// Utiliser le setter
$mediaObject->setFile($newUploadedFile);
}
}
}