vendor/contao/core-bundle/src/HttpKernel/ControllerResolver.php line 33

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4. * This file is part of Contao.
  5. *
  6. * (c) Leo Feyer
  7. *
  8. * @license LGPL-3.0-or-later
  9. */
  10. namespace Contao\CoreBundle\HttpKernel;
  11. use Contao\CoreBundle\Fragment\FragmentRegistry;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
  14. class ControllerResolver implements ControllerResolverInterface
  15. {
  16. private ControllerResolverInterface $resolver;
  17. private FragmentRegistry $registry;
  18. /**
  19. * @internal
  20. */
  21. public function __construct(ControllerResolverInterface $resolver, FragmentRegistry $registry)
  22. {
  23. $this->resolver = $resolver;
  24. $this->registry = $registry;
  25. }
  26. public function getController(Request $request)
  27. {
  28. if (
  29. $request->attributes->has('_controller')
  30. && \is_string($controller = $request->attributes->get('_controller'))
  31. ) {
  32. $fragmentConfig = $this->registry->get($controller);
  33. if (null !== $fragmentConfig) {
  34. $request->attributes->set('_controller', $fragmentConfig->getController());
  35. }
  36. }
  37. return $this->resolver->getController($request);
  38. }
  39. public function getArguments(Request $request, callable $controller): array
  40. {
  41. if (!method_exists($this->resolver, 'getArguments')) {
  42. return [];
  43. }
  44. return $this->resolver->getArguments($request, $controller);
  45. }
  46. }