Ich verwende sonata media bundle.Sonata Media Bundle: Zugang Media URL
und ich frage mich, wie kann ich auf die Medien-URL im Zweig zugreifen.
Ich möchte nur die URL, ich brauche nicht die Medien zu zeigen.
Irgendwelche Vorschläge?
Ich verwende sonata media bundle.Sonata Media Bundle: Zugang Media URL
und ich frage mich, wie kann ich auf die Medien-URL im Zweig zugreifen.
Ich möchte nur die URL, ich brauche nicht die Medien zu zeigen.
Irgendwelche Vorschläge?
Sie haben die Pfad Medien Helfer verwenden:
{% path media, 'small' %}
In dem obigen Code ist media
eine Instanz der Medieneinheit und small
ist das gewählte Format.
http://sonata-project.org/bundles/media/master/doc/reference/helpers.html#twig-usage
Aber wenn man die Medien nicht genau dort machen wollen und speichern Sie einfach die URL in einer Variablen, müssen Sie die Medien für die öffentliche URL fragen. Das war mein Fall, dass ich die URL zu einer anderen Vorlage übergeben musste. Ich habe es geschafft, eine benutzerdefinierte Funktion in meiner Zweig-Erweiterung zu erstellen (siehe hier: http://symfony.com/doc/current/cookbook/templating/twig_extension.html).
vorausgesetzt, dass Sie den Container in Ihrem Beratungsdienst mit $this->container
haben, können Sie wie folgt tun:
public function getMediaPublicUrl($media, $format)
{
$provider = $this->container->get($media->getProviderName());
return $provider->generatePublicUrl($media, $format);
}
die Funktion in der Verlängerung registrieren:
public function getFunctions() {
....
'media_public_url' => new \Twig_Function_Method($this, 'getMediaPublicUrl'),
....
);
}
Und Ihre neue Helfer rufen Bilden Sie Ihre Vorlage:
{% set img_url = media_public_url(media, 'small') %}
zum Beispiel
Grüße
Seit Antwort @ javigzz ist nicht für mich arbeiten, hier ist ein Zweig-Erweiterung, die mit der neuesten Version von sonata_media
funktioniert:
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 }
Die Verwendung wird die gleiche sein:
{% set img_url = media_public_url(media, 'reference') %}
{{ dump(img_url) }}
Ich habe es einfach auf GitHub hinzugefügt: https://github.com/SocialbitGmbH/SonataMediaTwigExtensionBundle –
Sie verwenden können: {% path media, 'reference' %}
@Blauesocke - versucht, Ihre Lösung und hatte genau das gleiche Ergebnis für Datei proviser mit sowohl mit
{% set img_url = media_public_url(media, 'reference') %}
{{ dump(img_url) }}
und
{% path sonata_admin.value, 'reference' %}
@ javigzz das ist perfekt in Fall des Standardkontextes. Ich verwendete benutzerdefinierten Kontext, musste also $ format zuerst unter Berücksichtigung des Kontextnamens behandeln:
http://sonata-project.org/bundles/media/master/doc/reference/helpers.html # twig-usage – cheesemacfly