src/Cms/ModuleBundle/Request/ParamConverter/ContainerConverter.php line 62

Open in your IDE?
  1. <?php
  2. namespace Cms\ModuleBundle\Request\ParamConverter;
  3. use Cms\ContainerBundle\Entity\Container;
  4. use Cms\CoreBundle\Util\Doctrine\EntityManager;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  6. use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\ParamConverterInterface;
  7. use Symfony\Component\HttpFoundation\Request;
  8. /**
  9.  * Class ContainerConverter
  10.  * @package Cms\ModuleBundle\Request\ParamConverter
  11.  */
  12. final class ContainerConverter implements ParamConverterInterface
  13. {
  14.     /**
  15.      * @var EntityManager
  16.      */
  17.     private EntityManager $em;
  18.     /**
  19.      * @param EntityManager $em
  20.      */
  21.     public function __construct(EntityManager $em)
  22.     {
  23.         $this->em $em;
  24.     }
  25.     /**
  26.      * {@inheritdoc}
  27.      */
  28.     public function apply(Request $requestParamConverter $configuration): bool
  29.     {
  30.         $name $configuration->getName();
  31.         $class $configuration->getClass();
  32.         if ( ! $request->attributes->has($name)) {
  33.             throw new \LogicException();
  34.         }
  35.         $value $request->attributes->get($name);
  36.         $entity $value $this->em->getRepository($class)->find($value) : null;
  37.         if ($entity && ! $entity instanceof Container) {
  38.             throw new \LogicException();
  39.         }
  40.         if ($entity && ! $entity instanceof $class) {
  41.             throw new \LogicException();
  42.         }
  43.         if ($entity) {
  44.             $request->attributes->set($name$entity);
  45.         }
  46.         return (bool) $entity;
  47.     }
  48.     /**
  49.      * {@inheritdoc}
  50.      */
  51.     public function supports(ParamConverter $configuration): bool
  52.     {
  53.         if (empty($configuration->getClass())) {
  54.             return false;
  55.         }
  56.         return $configuration->getClass() === Container::class || is_subclass_of($configuration->getClass(), Container::class);
  57.     }
  58. }