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 :
/fr/visit_accueil
/en/visit_accueli
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.

Par exemple sur la page contact :
Changer
/en/visit_contact
en
/toto/visit_contact
Voilà ce que j'ai fait :
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
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']));
        }
    }
}
Merci d'avance pour votre aide !