src/Controller/LanguageController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Exception;
  4. use App\Entity\User;
  5. use App\Entity\Country;
  6. use App\Service\MessageService;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use phpDocumentor\Reflection\DocBlock\Tags\Var_;
  11. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. class LanguageController extends AbstractController
  14. {
  15.     /**
  16.      * @Route("/language", name="language")
  17.      * @param Request $request
  18.      * @param MessageService $messageService
  19.      * @return Response
  20.      *
  21.      * the language locale is set in LocaleSubscriber
  22.      * under EventSubscriber. This functions just sets
  23.      * language for the user and gives feedback on change.
  24.      *
  25.      * if user is logged in save language as default language to user
  26.      * if not logged in, just give feedback for changed language
  27.      *
  28.      * @throws Exception
  29.      */
  30.     public function language(Request $requestMessageService $messageService)
  31.     {
  32.         // load language from query for later use
  33.         $language $request->get('language'false);
  34.         $baseUrl $this->generateUrl('home', [], UrlGeneratorInterface::ABSOLUTE_URL);
  35.         $source $request->headers->get('referer'$baseUrl);
  36.         // get all countries    
  37.         $countrys $this->getDoctrine()->getRepository(Country::class)->findAll();
  38.         $countrys array_map(function($country) {
  39.             return $country->getDefaultLanguage();
  40.         }, $countrys);
  41.         in_array($language$countrys) ?: $language 'en';
  42.         // if logged in
  43.         if ($user_tmp $this->getUser()) {
  44.             // save language to user
  45.             $entityManager $this->getDoctrine()->getManager();
  46.             $user $entityManager->getRepository(User::class)->find($user_tmp->getId());
  47.             $user->setLanguage($language);
  48.             $entityManager->persist($user);
  49.             $entityManager->flush();
  50.             // and give feedback
  51.             $messageService->setMessage('Language switched to '.strtoupper($language).' successfully.');
  52.             $messageService->setMessage('Saved new default language '.strtoupper($language).' on user.');
  53.         } else {
  54.             // just feedback
  55.             $messageService->setMessage('Language switched to '.strtoupper($language).' successfully.');
  56.         }
  57.         // render view
  58.         return $this->redirect(urldecode($source));
  59.     }
  60. }