src/App/EventListener/ProductImagesUploadListener.php line 22

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener;
  4. use Sylius\Component\Core\Model\ImagesAwareInterface;
  5. use Sylius\Component\Core\Uploader\ImageUploaderInterface;
  6. use Symfony\Component\EventDispatcher\GenericEvent;
  7. use Webmozart\Assert\Assert;
  8. class ProductImagesUploadListener
  9. {
  10.     /** @var ImageUploaderInterface */
  11.     private $uploader;
  12.     public function __construct(ImageUploaderInterface $uploader)
  13.     {
  14.         $this->uploader $uploader;
  15.     }
  16.     public function uploadImages(GenericEvent $event): void
  17.     {
  18.         $subject $event->getSubject();
  19.         if (count($subject->getProductAttributes()) > 0) {
  20.             foreach ($subject->getProductAttributes() as $productAttribute) {
  21.                 if (count($productAttribute->getProductAttributeItems()) > 0) {
  22.                     foreach ($productAttribute->getProductAttributeItems() as $productAttributeItem) {
  23.                         Assert::isInstanceOf($productAttributeItemImagesAwareInterface::class);
  24.                         $this->uploadSubjectImages($productAttributeItem);
  25.                     }
  26.                 }
  27.             }
  28.         }
  29.     }
  30.     private function uploadSubjectImages(ImagesAwareInterface $subject): void
  31.     {
  32.         $images $subject->getImages();
  33.         foreach ($images as $image) {
  34.             if ($image->hasFile()) {
  35.                 $this->uploader->upload($image);
  36.             }
  37.             // Upload failed? Let's remove that image.
  38.             if (null === $image->getPath()) {
  39.                 $images->removeElement($image);
  40.             }
  41.         }
  42.     }
  43. }