vendor/easycorp/easyadmin-bundle/src/Factory/ControllerFactory.php line 42

  1. <?php
  2. namespace EasyCorp\Bundle\EasyAdminBundle\Factory;
  3. use EasyCorp\Bundle\EasyAdminBundle\Contracts\Controller\CrudControllerInterface;
  4. use EasyCorp\Bundle\EasyAdminBundle\Contracts\Controller\DashboardControllerInterface;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
  7. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  8. /**
  9.  * @author Lukas Lücke <lukas@luecke.me>
  10.  */
  11. final class ControllerFactory
  12. {
  13.     private ControllerResolverInterface $controllerResolver;
  14.     public function __construct(ControllerResolverInterface $controllerResolver)
  15.     {
  16.         $this->controllerResolver $controllerResolver;
  17.     }
  18.     public function getDashboardControllerInstance(string $controllerFqcnRequest $request): ?DashboardControllerInterface
  19.     {
  20.         return $this->getDashboardController($controllerFqcn$request);
  21.     }
  22.     public function getCrudControllerInstance(?string $crudControllerFqcn, ?string $crudActionRequest $request): ?CrudControllerInterface
  23.     {
  24.         if (null === $crudControllerFqcn) {
  25.             return null;
  26.         }
  27.         return $this->getCrudController($crudControllerFqcn$crudAction$request);
  28.     }
  29.     private function getDashboardController(?string $dashboardControllerFqcnRequest $request): ?DashboardControllerInterface
  30.     {
  31.         return $this->getController(DashboardControllerInterface::class, $dashboardControllerFqcn'index'$request);
  32.     }
  33.     private function getCrudController(?string $crudControllerFqcn, ?string $crudActionRequest $request): ?CrudControllerInterface
  34.     {
  35.         return $this->getController(CrudControllerInterface::class, $crudControllerFqcn$crudAction$request);
  36.     }
  37.     private function getController(string $controllerInterface, ?string $controllerFqcn, ?string $controllerActionRequest $request)
  38.     {
  39.         if (null === $controllerFqcn || null === $controllerAction) {
  40.             return null;
  41.         }
  42.         $newRequest $request->duplicate(nullnull, ['_controller' => [$controllerFqcn$controllerAction]]);
  43.         $controllerCallable $this->controllerResolver->getController($newRequest);
  44.         if (false === $controllerCallable) {
  45.             throw new NotFoundHttpException(sprintf('Unable to find the controller "%s::%s".'$controllerFqcn$controllerAction));
  46.         }
  47.         if (!\is_array($controllerCallable)) {
  48.             return null;
  49.         }
  50.         $controllerInstance $controllerCallable[0];
  51.         return is_subclass_of($controllerInstance$controllerInterface) ? $controllerInstance null;
  52.     }
  53. }