Pour récupérer l'URL d'un asset depuis un service on peut utiliser la méthode getUrl() du helper templating.helper.assets :
$this->get('templating.helper.assets')->getAssetUrl('img/image.png');
Pour cela, il faut injecter le service templating et accéder au helper puis à la méthode getUrl(), mais en faisant cela on obtient une erreur du type "Scope Widening Injection detected".
La solution est donc d'injecter dans le service @service_container, puis de faire appel au service templating.helper.assets directement via ContainerInterface :
Le fichier services.yml
services:
mon_service:
class: Demo\DemoBundle\Classe\MyService
arguments: [@service_container]
La classe du service
namespace Demo\DemoBundle\Classe;
use Doctrine\ORM\EntityManager;
use Symfony\Component\DependencyInjection\ContainerInterface;
class MyService
{
private $container;
public function __construct( ContainerInterface $container )
{
$this->container = $container;
}
/**
* Récupération de l'URL de l'image
*/
public function getUrlImage(){
$url_image = $this->container->get('templating.helper.assets')->getUrl('img/image.png');
return $url_image;
}
}