Por fin he encontrado un hueco para darle un repaso a esto. Ya lo he conseguido.
Injecto el objeto request en el MenuBuilder y junto con el container que ya tenía injectado podemos hacer la jugada.
Código PHP:
private function cargarIdiomas(KnpMenuMenuItem $menu)
{
$router = $this->container->get('router');
$route = $this->request->get('_route');
$locale = $this->request->get('_locale');
$arrayParametros = $this->request->attributes->all();
$arrayParametros = $arrayParametros['_route_params'];
if($locale != "es"){
$arrayParametros['_locale'] = "es";
$menu->addChild('ES', array('uri' => $router->generate($route, $arrayParametros)));
}
if($locale != "fr"){
$arrayParametros['_locale'] = "fr";
$menu->addChild('FR', array('uri' => $router->generate($route, $arrayParametros)));
}
if($locale != "en"){
$arrayParametros['_locale'] = "en";
$menu->addChild('EN', array('uri' => $router->generate($route, $arrayParametros)));
}
}
public function setRequest(RequestStack $request_stack)
{
$this->request = $request_stack->getCurrentRequest();
}
service.yml
Código:
generico.menu_builder:
class: %class.generico.menubuilder%
arguments:
- "@service_container"
calls:
- [setRequest, [@request_stack]]