Hallo zusammen
Ich würde gerne das gleiche machen und den contao.image.resizer Service dekorieren.
Aktuell habe ich folgendes:
services.yml
PHP-Code:
services:
example.image.resizer:
class: Vendor\ExampleBundle\Classes\ImageResizer
decorates: contao.image.resizer
arguments:
- '@example.image.resizer.inner'
public: true
Classes\ImageResize.php
PHP-Code:
<?php
namespace Vendor\ExampleBundle\Classes;
use Contao\Image\DeferredImageInterface;
use Contao\CoreBundle\Image\LegacyResizer;
use Contao\Image\ImageInterface;
use Contao\Image\ResizeConfiguration;
use Contao\Image\ResizeOptions;
use Imagine\Image\ImagineInterface;
use Contao\Image\ImageDimensions;
use Contao\Image\ImportantPart;
class ImageResizer implements DeferredImageInterface
{
private DeferredImageInterface $resizer;
public function __construct(DeferredImageInterface $resizer)
{
$this->resizer = $resizer;
}
public function getImagine(): ImagineInterface
{
return $this->resizer->getImagine();
}
public function getPath(): string
{
return $this->resizer->getPath();
}
public function getUrl(string $rootDir, string $prefix = ''): string
{
return $this->resizer->getUrl($rootDir, $prefix);
}
public function getDimensions(): ImageDimensions
{
return $this->resizer->getDimensions();
}
public function getImportantPart(): ImportantPart
{
return $this->resizer->getImportantPart();
}
public function setImportantPart(ImportantPart $importantPart = null): ImageInterface
{
return $this->resizer->setImportantPart($importantPart);
}
}
Dabei erhalte ich beim composer install / Cache leeren keine Fehlemeldung.
Aber beim öffnen des Backends, erscheint sofort diese Meldung:
Code:
Argument 1 passed to Vendor\ExampleBundle\Classes\ImageResizer::__construct() must implement interface Contao\Image\DeferredImageInterface, instance of Contao\CoreBundle\Image\LegacyResizer given, called in /home/var/cache/dev/ContainerH9ro3X5/getVendor_Image_ResizerService.php on line 22
Wenn ich nun die "DeferredImageInterface" Klasse bei der _construct Methode und dem typed Property entferne, erhalte ich einfach das nächste Problem:
Code:
Argument 1 passed to Contao\CoreBundle\Image\ImageFactory::__construct() must implement interface Contao\Image\ResizerInterface, instance of Vendor\ExampleBundle\Classes\ImageResizer given, called in /home/var/cache/dev/ContainerH9ro3X5/getContao_Image_ImageFactoryService.php on line 17
Mache ich was grundsätzliches Falsch?
Kenne mich mit dem dekorieren leider nicht aus.
Danke im Voraus
Lesezeichen