src/ParamConverter/CityParamConverter.php line 34

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by simpson <simpsonwork@gmail.com>
  4.  * Date: 2019-04-20
  5.  * Time: 16:44
  6.  */
  7. namespace App\ParamConverter;
  8. use App\Entity\Location\City;
  9. use App\Repository\CityRepository;
  10. use App\Service\DefaultCityProvider;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  12. use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\ParamConverterInterface;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  15. class CityParamConverter implements ParamConverterInterface
  16. {
  17.     public function __construct(
  18.         protected CityRepository $cityRepository,
  19.         protected DefaultCityProvider $defaultCityProvider
  20.     ) {}
  21.     /**
  22.      * @inheritDoc
  23.      */
  24.     public function apply(Request $requestParamConverter $configuration): bool
  25.     {
  26.         $param $configuration->getName();
  27.         $uriIdentity $request->attributes->get($paramnull);
  28.         if (null === $uriIdentity) {
  29.             $city $this->defaultCityProvider->getDefaultCity();
  30.         } else {
  31.             $city $this->cityRepository->ofUriIdentity($uriIdentity);
  32.         }
  33.         if (null === $city) {
  34.             throw new NotFoundHttpException(sprintf('City with URI identity %s was not found.'$uriIdentity));
  35.         }
  36.         $request->attributes->set($param$city);
  37.         return true;
  38.     }
  39.     /**
  40.      * @inheritDoc
  41.      */
  42.     public function supports(ParamConverter $configuration): bool
  43.     {
  44.         if (null === $configuration->getClass()) {
  45.             return false;
  46.         }
  47.         return City::class === $configuration->getClass() || is_subclass_of($configuration->getClass(), City::class);
  48.     }
  49. }