回答
您必須使用路徑媒體幫手:
{% path media, 'small' %}
在上面的代碼,media
是媒體實體的實例,並small
是選擇的格式。
http://sonata-project.org/bundles/media/master/doc/reference/helpers.html#twig-usage
但是,如果你不希望呈現媒體就在那裏,只是存儲URL中的變量,你需要問媒體提供商的公開網址。 這是我的情況,我需要將url傳遞給另一個模板。 我做了它在我的樹枝延伸中創建自定義功能(請參閱: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);
}
註冊的擴展功能:
public function getFunctions() {
....
'media_public_url' => new \Twig_Function_Method($this, 'getMediaPublicUrl'),
....
);
}
,並致電新幫手形成您的模板:
{% set img_url = media_public_url(media, 'small') %}
例如
問候
自@ javigzz的答案沒有工作對我來說,這裏是一個樹枝延伸,與最新版本的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 }
使用方法相同:
{% set img_url = media_public_url(media, 'reference') %}
{{ dump(img_url) }}
剛剛在GitHub上添加了這個:https://github.com/SocialbitGmbH/SonataMediaTwigExtensionBundle –
您可以使用:{% path media, 'reference' %}
@Blauesocke - 想你的解決方案,並具有完全相同的結果文件proviser使用兩個
{% set img_url = media_public_url(media, 'reference') %}
{{ dump(img_url) }}
和
{% path sonata_admin.value, 'reference' %}
@ javigzz的是完美的默認情況下的情況。我使用自定義上下文,所以必須首先考慮上下文名稱來處理$格式:
$provider = $this->container->get($media->getProviderName());
$format = $provider->getFormatName($media, $format);
$url = $provider->generatePublicUrl($media, $format);
- 1. Sonata Media Bundle Override
- 2. 安裝Sonata Media Bundle
- 3. Sonata Media Bundle missing entity類別
- 4. Sonata Media Bundle 3.0(或2.4)
- 5. Sonata Media Bundle和約束
- 6. API Post to Sonata Media Bundle Symfony 3
- 7. 如何覆蓋Sonata Media Bundle模板?
- 8. Sonata Admin Bundle問題
- 9. sonata media-AWS CDN
- 10. 訪問社交媒體管理網站上的原始網址
- 11. SONATA USER BUNDLE/FOS USER BUNDLE
- 12. 如何使用Sonata Media Bundle覆蓋symfony2.3中的奏鳴曲基礎媒體管理類
- 13. Windows Media Services網絡流媒體
- 14. 如何在Sonata Media Bundle中實現多對多關係
- 15. Sonata Media Bundle - 如何編寫自定義提供程序?
- 16. Django:訪問模板中的表單媒體的原始網址
- 17. 網站優化媒體屏幕寬度的問題(@media CSS)
- 18. Django中的靜態和媒體網址
- 19. Symfony 2獲得實體類中的Sonata媒體文件路徑
- 20. Umbraco從網址獲取媒體
- 21. Apache的訪問/媒體/替代的DocumentRoot /媒體
- 22. Sitecore索引中的urllink通過「/ sitecore/shell /〜/ media/...」返回媒體網址
- 23. GenemuFormbundle select2與Sonata Admin Bundle集成Symfony2.3
- 24. 禁止訪問django apache2媒體文件
- 25. Django。無法訪問media_url媒體文件
- 26. 嘗試訪問「/媒體/上傳/
- 27. CKEditor未與Sonata格式化程序(Sonata Admin Bundle)一同顯示
- 28. 訪問媒體像WhatsApp的
- 29. JPlayer媒體文件訪問
- 30. Sonata Media Bundle - 如何限制特定上下文的文件擴展名?
http://sonata-project.org/bundles/media/master/doc/reference/helpers。html#twig-usage – cheesemacfly