la idea es tener en un menu, las opciones "ES" y "EN" tal que hacer click
sobre una de ellas cambie el locale de la aplicacion a la seleccionada (ESpañol/ English)
para esto, vamos a crear un listener que tenga un metodo que setee el locale de la aplicacion
segun el valor guardado en la session.
Este metodo se llamara automaticamente antes de ejecutar un action.
Para esto, registramos el listener en app/config/services.yml
app.lenguaje_loader.listener:
class: AppBundle\EventListener\LenguajeListener
arguments: ['@service_container','@logger']
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest}
aqui lo importante es:
event: kernel.request (este tipo de evento es el que se dispara antes de ejecutarse un action, el evento que se dispara despues de un action es kernel.controller)
method: metodo del listener que atrapara el evento y realizara algun proceso.
la variable de session que guardara mi locale se llamara "myLocale"
el Listener:
en src/AppBundle/EventListener/lenguajeListener.php
class LenguajeListener
{
private $container;
public function __construct(Container $container,LoggerInterface $logger)
{
$this->logger = $logger;
$this->container = $container;
}
public function onKernelRequest(GetResponseEvent $event) {
$request = $event->getRequest();
$session = $request->getSession();
$locale = $session->get('myLocale');
if ($locale) {
$this->logger->debug('service->locale: '.$locale);
$request->setLocale($locale);
$this->container->get('translator')->setLocale($locale);//setea el locale de la app con el de la session
}else {
$this->logger->debug('locale: no existe');
}
}
}
el controller:
class LenguajeController extends Controller
{
/**
* @Route(path = "lenguaje/cambiar/{locale}", name = "cambiar.lenguaje")
*/
public function enviarAction($locale,Request $request)
{
$this->get('logger')->debug('controller->locale: '.$locale);
$session = $request->getSession();
$url = $request->getBaseUrl();
if ($request->headers->has('referer')) {
$url = $request->headers->get('referer');
}
$session->set('myLocale', $locale);//setea la variable de session myLocale con el valor del parametro
return $this->redirect($url);//redirecciona a la url actual
}
}
en la vista:
<li>
<a href="{{ path('cambiar.lenguaje', {'locale': 'es'}) }}" class="{{ app.request.locale=='es'? 'h3':'h6' }}">Es</a>
</li>
<li>
<a href="{{ path('cambiar.lenguaje', {'locale': 'en'}) }}" class="{{ app.request.locale=='en'? 'h3':'h6' }}">En</a>
</li>
Suscribirse a:
Enviar comentarios (Atom)
linux ubuntu mint actualizar chrome
desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable
-
por consola y desde la raiz de tu proyecto php artisan --version
-
en nuestro proyecto creamos una carpeta llamada donde estaran todas nuestras clases, por ejemplo una llamada: MiApp adentro de esta irian b...
-
Integridad al nivel de la base de datos Oracle Oracle valida la integridad de la base de datos y presenta los siguientes mensajes de erro...
No hay comentarios:
Publicar un comentario