Sonata Media Bundle:访问媒体网址

vir*_*rhi 11 symfony twig sonata-admin

我正在使用奏鸣曲媒体包.

我想知道如何在树枝上访问媒体网址.
我只想要网址,我不需要向媒体展示.

有什么建议?

Fra*_*ula 14

您必须使用路径媒体助手:

{% path media, 'small' %}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,media是媒体实体的实例,并且small是所选择的格式.

http://sonata-project.org/bundles/media/master/doc/reference/helpers.html#twig-usage


jav*_*gzz 11

但是,如果您不想在那里呈现媒体并将URL存储在变量中,则需要向媒体提供商询问公共URL.这是我的情况,我需要将URL传递给另一个模板.我在我的Twig Extension中创建了一个自定义函数(参见http://symfony.com/doc/current/cookbook/templating/twig_extension.html).

如果您的扩展服务中有容器$this->container,您可以这样做:

public function getMediaPublicUrl($media, $format)
{
    $provider = $this->container->get($media->getProviderName());

    return $provider->generatePublicUrl($media, $format);
}
Run Code Online (Sandbox Code Playgroud)

在扩展中注册该功能:

public function getFunctions() {
     ....
    'media_public_url' => new \Twig_Function_Method($this, 'getMediaPublicUrl'),
     ....
    );
}
Run Code Online (Sandbox Code Playgroud)

并从您的模板中调用您的新助手:

{% set img_url = media_public_url(media, 'small') %}
Run Code Online (Sandbox Code Playgroud)

例如

问候


小智 7

@javigzz在默认情境下是完美的.我使用自定义上下文,所以不得不首先考虑上下文名称来处理$格式:

$provider = $this->container->get($media->getProviderName());
$format = $provider->getFormatName($media, $format);
$url = $provider->generatePublicUrl($media, $format);
Run Code Online (Sandbox Code Playgroud)