Tôi đang sử dụng sonata media bundle.Gói truyền thông Sonata: acces url phương tiện
và tôi đã tự hỏi làm thế nào tôi có thể truy cập url phương tiện trong twig.
Tôi chỉ muốn url, tôi không cần hiển thị phương tiện.
Mọi đề xuất?
Tôi đang sử dụng sonata media bundle.Gói truyền thông Sonata: acces url phương tiện
và tôi đã tự hỏi làm thế nào tôi có thể truy cập url phương tiện trong twig.
Tôi chỉ muốn url, tôi không cần hiển thị phương tiện.
Mọi đề xuất?
Bạn phải sử dụng các phương tiện truyền thông đường helper:
{% path media, 'small' %}
Trong đoạn mã trên, media
là một thể hiện của thực thể truyền thông, và small
là định dạng được lựa chọn.
http://sonata-project.org/bundles/media/master/doc/reference/helpers.html#twig-usage
Nhưng nếu bạn không muốn làm cho giới truyền thông ngay lập tức và chỉ lưu trữ các url trong một biến, bạn cần phải hỏi nhà cung cấp phương tiện truyền thông cho các url công cộng. Đây là trường hợp của tôi, rằng tôi cần phải chuyển url tới một mẫu khác. Tôi đã làm nó tạo ra một chức năng tùy chỉnh trong phần mở rộng Twig của tôi (xem ở đây: http://symfony.com/doc/current/cookbook/templating/twig_extension.html).
Với điều kiện là bạn có chứa sẵn trong dịch vụ mở rộng của bạn với $this->container
, bạn có thể làm như thế này:
public function getMediaPublicUrl($media, $format)
{
$provider = $this->container->get($media->getProviderName());
return $provider->generatePublicUrl($media, $format);
}
đăng ký chức năng trong phần mở rộng:
public function getFunctions() {
....
'media_public_url' => new \Twig_Function_Method($this, 'getMediaPublicUrl'),
....
);
}
Và gọi helper mới của bạn tạo mẫu của bạn:
{% set img_url = media_public_url(media, 'small') %}
ví dụ
liên quan
Kể từ khi câu trả lời @ javigzz đã không làm việc cho tôi, đây là một phần mở rộng cành lá làm việc với phiên bản mới nhất của 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 }
Cách sử dụng sẽ giống nhau:
{% set img_url = media_public_url(media, 'reference') %}
{{ dump(img_url) }}
Chỉ cần thêm phần này vào GitHub: https://github.com/SocialbitGmbH/SonataMediaTwigExtensionBundle –
Bạn có thể sử dụng: {% path media, 'reference' %}
@Blauesocke - cố gắng giải pháp của bạn và có chính xác kết quả tương tự cho file proviser với việc sử dụng cả hai
{% set img_url = media_public_url(media, 'reference') %}
{{ dump(img_url) }}
và
{% path sonata_admin.value, 'reference' %}
@ javigzz là hoàn hảo trong trường hợp ngữ cảnh mặc định. Tôi đã sử dụng bối cảnh tùy chỉnh, do đó, trước tiên phải xử lý định dạng $ có tính đến tên ngữ cảnh:
$provider = $this->container->get($media->getProviderName());
$format = $provider->getFormatName($media, $format);
$url = $provider->generatePublicUrl($media, $format);
http://sonata-project.org/bundles/media/master/doc/reference/helpers.html # twig-usage – cheesemacfly