Używam sonata media bundle.Pakiet nośników Sonata: dostęp do adresu url
i zastanawiałem się, jak uzyskać dostęp do adresu URL multimediów w gałązce.
Po prostu chcę adresu URL, nie muszę pokazywać multimediów.
Wszelkie sugestie?
Używam sonata media bundle.Pakiet nośników Sonata: dostęp do adresu url
i zastanawiałem się, jak uzyskać dostęp do adresu URL multimediów w gałązce.
Po prostu chcę adresu URL, nie muszę pokazywać multimediów.
Wszelkie sugestie?
Musisz użyć ścieżki mediów pomocnika:
{% path media, 'small' %}
W powyższym kodzie, media
jest instancją podmiotu mediów i small
jest wybranym formacie.
http://sonata-project.org/bundles/media/master/doc/reference/helpers.html#twig-usage
Ale jeśli nie chcesz, aby uczynić media tam i po prostu przechowywać url w zmiennej, trzeba zwrócić się do dostawcy mediów dla url publicznego. To był mój przypadek, że musiałem przekazać URL do innego szablonu. Zrobiłem to tworząc niestandardową funkcję w moim rozszerzeniu Twig (patrz tutaj: http://symfony.com/doc/current/cookbook/templating/twig_extension.html).
Pod warunkiem, że masz pojemnik dostępne w usłudze Przedłużacz z $this->container
, można zrobić tak:
public function getMediaPublicUrl($media, $format)
{
$provider = $this->container->get($media->getProviderName());
return $provider->generatePublicUrl($media, $format);
}
zarejestrować funkcję w aparacie:
public function getFunctions() {
....
'media_public_url' => new \Twig_Function_Method($this, 'getMediaPublicUrl'),
....
);
}
I nazwać swój nowy pomocnika utwórz szablon:
{% set img_url = media_public_url(media, 'small') %}
na przykład
pozdrowienia
Od użytkownika @ javigzz odpowiedź nie dla mnie, tutaj jest rozszerzeniem gałązka, która współpracuje z najnowszą wersją 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 }
Użycie będzie takie samo:
{% set img_url = media_public_url(media, 'reference') %}
{{ dump(img_url) }}
Po prostu dodałem to na GitHub: https://github.com/SocialbitGmbH/SonataMediaTwigExtensionBundle –
Można użyć: {% path media, 'reference' %}
@Blauesocke - próbował swoje rozwiązanie i miał dokładnie ten sam wynik dla pliku proviser z wykorzystaniem zarówno
{% set img_url = media_public_url(media, 'reference') %}
{{ dump(img_url) }}
i
{% path sonata_admin.value, 'reference' %}
@ javigzz jest doskonały w Przypadek domyślnego kontekstu. Użyłem niestandardowego kontekstu, więc musiałem obsłużyć format $ najpierw biorąc pod uwagę nazwę kontekstu:
$provider = $this->container->get($media->getProviderName());
$format = $provider->getFormatName($media, $format);
$url = $provider->generatePublicUrl($media, $format);
http://sonata-project.org/bundles/media/master/rec/reference/helpers.html # twig-usage – cheesemacfly