Symfony2 : générer une URL d'un asset depuis un service

dans Symfony2

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;

     }

}
Posté il y a par keepcodeclear.
Uncaught Exception

Uncaught Exception

Module 'mysqli' already loaded

Origin

on line 0

Trace

#0 [internal function]: System\Error::shutdown()
#1 {main}