Muchas aplicaciones Symfony 2 son multiidioma gracias a la capacidad del popular framework para manejar las traducciones. En este contexto la variable locale
contendrá el identificador del idioma. Desde el controlador es muy sencillo obtener el locale
a partir del request
; basta pedirlo: $this->get('request')->getLocale()
. En cambio no es tan sencillo inyectar el locale
en el constructor de un servicio debido a los diferentes ámbitos (scopes) que pueden tener los servicios.
Sin embargo hay un truco para hacerlo:
<service id="mylocale" class="Symfony\Component\HttpFoundation\Request" factory-service="request" factory-method="getLocale"> </service> <service id="myservice" class="%myservice.class%"> <argument type="service" id="mylocale" on-invalid="null" /> </service>
Es decir, primero creamos un service factory
que acceda al Request
para obtener el locale
y luego inyectamos el service factory
en nuestro servicio. el parámetro on-invalid="null"
es muy importante para solucionar aquellos casos en que el Request
no existe; como por ejemplo los comandos de consola. Al implementar la clase hay que tener en cuenta que es posible que recibamos null
en lugar del locale
.
class MyService { /** * @var string */ private $locale; /** * @param string $locale */ public function __construct($locale = null) { $this->locale = $locale; } // (...) }
No hay comentarios:
Publicar un comentario