Sonata Media Bundle : acces media url

前端 未结 5 2031
小蘑菇
小蘑菇 2021-01-02 01:09

I am using sonata media bundle.

and I was wondering how can I access the media url in twig.
I just want the url, I do not need to show the media.

Any sug

5条回答
  •  滥情空心
    2021-01-02 02:08

    Since @javigzz's answer did not work for me, here is a twig extension that works with the latest version of sonata_media:

    namespace Socialbit\SonataMediaTwigExtensionBundle\Twig;
    
    use Sonata\CoreBundle\Model\ManagerInterface;
    use Symfony\Component\DependencyInjection\Container;
    
    Class:
    /**
     * Description of MediaPathExtension
     *
     * @author thomas.kekeisen
     */
    class MediaPathExtension extends \Twig_Extension
    {
        /**
         *
         * @var type Container
         */
        protected $container;
    
        /**
         *
         * @var type ManagerInterface
         */
        protected $mediaManager;
    
        public function __construct(Container $container, $mediaManager)
        {
            $this->container = $container;
            $this->mediaManager = $mediaManager;
        }
    
        public function getFunctions()
        {
            return array
            (
                'media_public_url' => new \Twig_Function_Method($this, 'getMediaPublicUrl')
            );
        }
    
        /**
         * @param mixed $media
         *
         * @return null|\Sonata\MediaBundle\Model\MediaInterface
         */
        private function getMedia($media)
        {
            $media = $this->mediaManager->findOneBy(array(
                'id' => $media
            ));
    
            return $media;
        }
    
        public function getMediaPublicUrl($media, $format)
        {
            $media = $this->getMedia($media);
    
            $provider = $this->container->get($media->getProviderName());
    
            return $provider->generatePublicUrl($media, $format);
        }
    
        public function getName()
        {
            return 'SocialbitSonataMediaTwigExtensionBundleMediaPathExtension';
        }
    }
    

    services.yml:

    services:
        socialbit.sonatamediatwigextensionbundle.mediapathextension:
            class: Socialbit\SonataMediaTwigExtensionBundle\Twig\MediaPathExtension
            public: false
            arguments:
                - @service_container
                - @sonata.media.manager.media
            tags:
                - { name: twig.extension }
    

    The usage will be the same:

    {% set img_url = media_public_url(media, 'reference') %}
    {{ dump(img_url) }}
    

提交回复
热议问题