Bonjour,
Sous SF 4.4.2, je suis sur un site qui propose 2 langues.
J'ai sur ce site des liens permettant de changer de langue, ça marche bien.
La langue est en préfixe des url :
Maintenant, si un visiteur s'amuse à changer la langue dans l'url, en mettant n'importe quoi, je veux qu'il soit redirigé vers ma page d'accueil en français./fr/visit_accueil
/en/visit_accueli
Par exemple sur la page contact :
Changeren/en/visit_contactVoilà ce que j'ai fait :/toto/visit_contact
J'ai créé un listener qui teste la langue, et redirige comme je veux, vers /fr/visit_accueil.
ça marche, ma page d'accueil s'affiche alors bien en français, mais l'url reste avec la langue foireuse : /toto/visit_accueil
Et je voudrai que ça m'affiche l'url : /fr/visit_accueil
2e problème, quand je suis sur /toto/visit_accueil, mes liens de changement de langue ne fonctionnent plus, je reste en français tant que j'ai toto dans l'url.
Je fais peut être trop compliqué, il suffit peut être de rajouter un paramètre dans la config de SF, mais je ne trouve pas
Je veux simplement que si la langue dans l'url n'est pas gérée par le site, ça me renvoie vers la page d'accueil avec fr dans l'url.
Voici mon code :
routes.yaml
Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 controllers: resource: '../src/Controller/' type: annotation monprojet: resource: 'routes/routes_monprojet.yaml' prefix: /{_locale}
services.yaml
Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 monprojet.veriflocale.listener: class: App\EventListener\VeriflocaleListener arguments: - "@request_stack" - "@router" tags: - { name: kernel.event_listener, event: kernel.response, method: processVeriflocale, priority: 255 }
VeriflocaleListener.php
Merci d'avance pour votre aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 namespace App\EventListener; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Routing\Router; use Symfony\Component\HttpFoundation\RedirectResponse; class VeriflocaleListener { protected $request_stack; private $router; function __construct(RequestStack $request_stack, Router $router) { $this->request = $request_stack->getCurrentRequest(); $this->router = $router; } public function processVeriflocale(FilterResponseEvent $event) { $request = $event->getRequest(); $locale = $request->getLocale(); if (($locale != 'fr') && ($locale != 'en')) { return new RedirectResponse($this->router->generate('index', ['_locale' => 'fr'])); } } }
Partager