Lines 100.00% 8 / 8
Functions and Methods 100.00% 1 / 1
Classes and Traits 100.00% 1 / 1
Name Lines Functions and Methods CRAP Classes and Traits
Switcher 100.00% 8 / 8 100.00% 1 / 1 2 100.00% 1 / 1
 __invoke 100.00% 8 / 8 100.00% 1 / 1 2
1<?php
2
3declare(strict_types=1);
4
5namespace App\Controller\Locale;
6
7use App\Controller\BaseController;
8use Symfony\Component\HttpFoundation\Cookie;
9use Symfony\Component\HttpFoundation\Request;
10use Symfony\Component\HttpFoundation\Response;
11use Symfony\Component\Routing\Attribute\Route;
12
13/**
14 * The language switcher: remembers the language in a cookie (App\EventListener\LocaleListener)
15 * and goes back to the page it was chosen on.
16 */
17#[Route('/locale/{locale}', name: 'app_locale', requirements: ['locale' => 'en|de|es'], methods: ['GET'])]
18class Switcher extends BaseController
19{
20    public const string COOKIE = 'locale';
21
22    public function __invoke(Request $request, string $locale): Response
23    {
24        // Only back to a page of this site
25        $referer = $request->headers->get('referer') ?? '';
26        $back = \str_starts_with($referer, $request->getSchemeAndHttpHost().'/')
27            ? $referer
28            : $this->generateUrl('app_default');
29
30        $response = $this->redirect($back);
31        $response->headers->setCookie(Cookie::create(self::COOKIE, $locale, new \DateTimeImmutable('+1 year'))
32            ->withSecure($request->isSecure()));
33
34        return $response;
35    }
36}