lib/boab/cms-bundle/src/Controller/BaseController.php line 128

Open in your IDE?
  1. <?php
  2. namespace Boab\CmsBundle\Controller;
  3. use Boab\CmsBundle\Entity\UserInterface;
  4. use Symfony\Component\Form\Form;
  5. use Boab\CmsBundle\Util\FlashInterface;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Boab\CmsBundle\View\ViewManagerInterface;
  8. use Boab\CmsBundle\View\ThemeManagerInterface;
  9. use Psr\Log\LoggerInterface;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\RouterInterface;
  12. use Symfony\Component\Form\FormFactoryInterface;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  15. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  16. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  17. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  18. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  19. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  20. abstract class BaseController
  21. {
  22.     protected $viewManager;
  23.     protected $themeManager;
  24.     protected $flash;
  25.     protected $router;
  26.     protected $formFactory;
  27.     protected $authorizationChecker;
  28.     protected $tokenStorage;
  29.     protected $entityManager;
  30.     protected $eventDispatcher;
  31.     protected $paginator;
  32.     protected $logger;
  33.     /**
  34.      * @required
  35.      */    
  36.     public function setEventDispatcher(EventDispatcherInterface $eventDispatcher)
  37.     {
  38.         $this->eventDispatcher $eventDispatcher;
  39.     }
  40.     /**
  41.      * @required
  42.      */  
  43.     public function setEntityManager(EntityManagerInterface $entityManager)
  44.     {
  45.         $this->entityManager $entityManager;
  46.     }
  47.     /**
  48.      * @required
  49.      */
  50.     public function setTemplate(ViewManagerInterface $viewManager)
  51.     {
  52.         $this->viewManager $viewManager;
  53.     }
  54.     /**
  55.      * @required
  56.      */
  57.     public function setThemeManager(ThemeManagerInterface $themeManager)
  58.     {
  59.         $this->themeManager $themeManager;
  60.     }
  61.     /**
  62.      * @required
  63.      */
  64.     public function setFormFactory(FormFactoryInterface $formFactory)
  65.     {
  66.         $this->formFactory $formFactory;
  67.     } 
  68.     /**
  69.      * @required
  70.      */
  71.     public function setFlash(FlashInterface $flash)
  72.     {
  73.         $this->flash $flash;
  74.     }
  75.     /**
  76.      * @required
  77.      */
  78.     public function setAuthorizationChecker(AuthorizationCheckerInterface $authorizationChecker)
  79.     {
  80.         $this->authorizationChecker $authorizationChecker;
  81.     }
  82.     /**
  83.      * @required
  84.      */    
  85.     public function setTokenStorage(TokenStorageInterface $tokenStorage)
  86.     {
  87.         $this->tokenStorage $tokenStorage;
  88.     }
  89.     /**
  90.      * @required
  91.      */    
  92.     public function setRouter(RouterInterface $router)
  93.     {
  94.         $this->router $router;
  95.     }
  96.     /**
  97.      * @required
  98.      */    
  99.     public function setLogger(LoggerInterface $logger)
  100.     {
  101.         $this->logger $logger;
  102.     }
  103.     /**
  104.      * Creates and returns a Form instance from the type of the form.
  105.      *
  106.      * @param string|FormTypeInterface $type    The built type of the form
  107.      * @param mixed                    $data    The initial data for the form
  108.      * @param array                    $options Options for the form
  109.      *
  110.      * @return Form
  111.      */
  112.     protected function createForm($type$data null, array $options = array())
  113.     {
  114.         return $this->formFactory->create($type$data$options);
  115.     }
  116.     
  117.     /**
  118.      * Creates and returns a form builder instance.
  119.      *
  120.      * @param mixed $data    The initial data for the form
  121.      * @param array $options Options for the form
  122.      *
  123.      * @return FormBuilder
  124.      */
  125.     protected function createFormBuilder($data null, array $options = array())
  126.     {
  127.         return $this->formFactory->createBuilder('form'$data$options);
  128.     }
  129.     protected function getUserToken()
  130.     {
  131.         return $this->tokenStorage->getToken()->getUser();
  132.     }
  133.     protected function getUser(): ?UserInterface
  134.     {
  135.         $token $this->tokenStorage->getToken();
  136.         if($token instanceof UsernamePasswordToken){
  137.             return $token->getUser();
  138.         }
  139.         return null;
  140.     }
  141.     protected function redirect($url$status 302)
  142.     {
  143.         return new RedirectResponse($url);
  144.     }  
  145.     protected function save($entity)
  146.     {
  147.         $this->entityManager->persist($entity);
  148.         $this->entityManager->flush();
  149.         $this->entityManager->refresh($entity);
  150.         
  151.         return $entity;
  152.     }
  153.     protected function update($entity)
  154.     {
  155.         $this->entityManager->persist($entity);
  156.         $this->entityManager->flush();
  157.         $this->entityManager->refresh($entity);
  158.         return $entity;
  159.     }
  160.     /**
  161.      * Checks if the attribute is granted against the current authentication token and optionally supplied subject.
  162.      *
  163.      * @throws \LogicException
  164.      */
  165.     protected function isGranted($attribute$subject null): bool
  166.     {
  167.         if (!$this->authorizationChecker) {
  168.             throw new \LogicException('The SecurityBundle is not registered in your application. Try running "composer require symfony/security-bundle".');
  169.         }
  170.         return $this->authorizationChecker->isGranted($attribute$subject);
  171.     }
  172.     /**
  173.      * Throws an exception unless the attribute is granted against the current authentication token and optionally
  174.      * supplied subject.
  175.      *
  176.      * @throws AccessDeniedException
  177.      */
  178.     protected function denyAccessUnlessGranted($attribute$subject nullstring $message 'Access Denied.'): void
  179.     {
  180.         if (!$this->isGranted($attribute$subject)) {
  181.             $exception $this->createAccessDeniedException($message);
  182.             $exception->setAttributes($attribute);
  183.             $exception->setSubject($subject);
  184.             throw $exception;
  185.         }
  186.     }
  187.     /**
  188.      * Returns an AccessDeniedException.
  189.      *
  190.      * This will result in a 403 response code. Usage example:
  191.      *
  192.      *     throw $this->createAccessDeniedException('Unable to access this page!');
  193.      *
  194.      * @throws \LogicException If the Security component is not available
  195.      */
  196.     protected function createAccessDeniedException(string $message 'Access Denied.'\Throwable $previous null): AccessDeniedException
  197.     {
  198.         if (!class_exists(AccessDeniedException::class)) {
  199.             throw new \LogicException('You cannot use the "createAccessDeniedException" method if the Security component is not available. Try running "composer require symfony/security-bundle".');
  200.         }
  201.         return new AccessDeniedException($message$previous);
  202.     }
  203.     public function delete($entity)
  204.     {
  205.         $this->entityManager->remove($entity);
  206.         $this->entityManager->flush();
  207.         return;
  208.     }   
  209.     
  210.     protected function getErrorMessages(\Symfony\Component\Form\Form $form
  211.     {      
  212.         $errors = array();
  213.         foreach ($form->getErrors(truetrue) as $error) {
  214.             // My personnal need was to get translatable messages
  215.             // $errors[] = $this->trans($error->getMessage());
  216.             $errors[] = $error->getMessage();
  217.         }
  218.     
  219.         return $errors;
  220.     }  
  221.     
  222.     public function render(string $template, array $data=[])
  223.     {
  224.         $html $this->viewManager->load($template)->render($data);
  225.         return new Response($html);
  226.     }
  227.     protected function redirectToRoute(string $routeName$params=[])
  228.     {
  229.         return $this->redirect($this->router->generate($routeName$params));
  230.     }
  231. }