src/WebBundle/Handler/Locale/Rule/CheckValidAndNotEmptyLocaleInUrlRuleHandler.php line 19

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace WebBundle\Handler\Locale\Rule;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use WebBundle\Handler\Locale\Executor\GetRedirectToUrlExecutorHandler;
  6. use WebBundle\Helper\LocaleHelper;
  7. use WebBundle\Validator\Locale\CountryAvailableLocaleValidator;
  8. use WebBundle\Validator\Locale\LangAvailableLocaleValidator;
  9. /**
  10.  * Проверяет: в урле есть полная локаль и она нормальная
  11.  * Если недопустимое значение любого параметра локали - обязательный редирект
  12.  */
  13. class CheckValidAndNotEmptyLocaleInUrlRuleHandler extends AbstractRuleHandler
  14. {
  15.     public function execute(): ?Response
  16.     {
  17.         // Если недопустимое значение любого параметра локали - обязательный редирект
  18.         // Null - валидное значение локали для здесь
  19.         if (!LangAvailableLocaleValidator::valid($this->machineLocaleHandler->getLangToUrl(), true)
  20.             || !CountryAvailableLocaleValidator::valid($this->machineLocaleHandler->getCountryToUrl(), true)
  21.         ) {
  22.             $localeFromUri LocaleHelper::getLocaleFromUri($this->machineLocaleHandler->getRequest()->getRequestUri());
  23.             if (!LangAvailableLocaleValidator::valid($this->machineLocaleHandler->getLangToUrl(), true)) {
  24.                 $localeFromUri->setLangToUrl('en');
  25.             }
  26.             // если язык не валиден, то валидная страна не может быть null
  27.             // если язык валиден, то страна и так не null
  28.             if (!CountryAvailableLocaleValidator::valid($this->machineLocaleHandler->getCountryToUrl())) {
  29.                 $localeFromUri->setCountryToUrl('us');
  30.             }
  31.             $urlForRedirect $this->machineLocaleHandler->getRequest()->getSchemeAndHttpHost() . $localeFromUri->getUrl();
  32.             return (new GetRedirectToUrlExecutorHandler($urlForRedirect))->do($this->machineLocaleHandler);
  33.         }
  34.         $this->nextStep(CheckUserApprovedCookieRuleHandler::getRule($this->machineLocaleHandler));
  35.         return parent::execute();
  36.     }
  37. }