<?php
namespace CoreBundle\Services;
use Sonata\MediaBundle\Model\MediaInterface;
use Sonata\MediaBundle\Provider\Pool;
use Sonata\MediaBundle\Twig\MediaRuntime;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class MediaExtensionVidi extends AbstractExtension
{
private Pool $pool;
public function __construct(Pool $pool)
{
$this->pool = $pool;
}
public function getFunctions(): array
{
return [
new TwigFunction('sonata_media', [MediaRuntime::class, 'media'], ['is_safe' => ['html']]),
new TwigFunction('sonata_thumbnail', [MediaRuntime::class, 'thumbnail'], ['is_safe' => ['html']]),
new TwigFunction('sonata_path', [MediaRuntime::class, 'path']),
new TwigFunction('path_webp', [$this, 'pathWebp']),
];
}
public function pathWebp(?MediaInterface $media, string $format): string
{
if (!$media) {
return '';
}
/** @var ImageProviderVidi $provider */
$provider = $this->pool->getProvider($media->getProviderName());
return $provider->generatePublicUrlWebp(
$media,
$provider->getFormatName($media, $format)
);
}
public function getPath(?MediaInterface $media, string $format): string
{
if (!$media) {
return '';
}
/** @var ImageProviderVidi $provider */
$provider = $this->pool->getProvider($media->getProviderName());
return $provider->generatePublicUrl(
$media,
$provider->getFormatName($media, $format)
);
}
}