Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ControllerResolver.php

function ControllerResolver::checkController

1 call to ControllerResolver::checkController()
ControllerResolver::getController in vendor/symfony/http-kernel/Controller/ControllerResolver.php

File

vendor/symfony/http-kernel/Controller/ControllerResolver.php, line 224

Class

ControllerResolver
This implementation uses the '_controller' request attribute to determine the controller to execute.

Namespace

Symfony\Component\HttpKernel\Controller

Code

private function checkController(Request $request, callable $controller) : callable {
    if (!$request->attributes
        ->get('_check_controller_is_allowed', false)) {
        return $controller;
    }
    $r = null;
    if (\is_array($controller)) {
        [
            $class,
            $name,
        ] = $controller;
        $name = (\is_string($class) ? $class : $class::class) . '::' . $name;
    }
    elseif (\is_object($controller) && !$controller instanceof \Closure) {
        $class = $controller;
        $name = $class::class . '::__invoke';
    }
    else {
        $r = new \ReflectionFunction($controller);
        $name = $r->name;
        if ($r->isAnonymous()) {
            $name = $class = \Closure::class;
        }
        elseif ($class = $r->getClosureCalledClass()) {
            $class = $class->name;
            $name = $class . '::' . $name;
        }
    }
    if ($class) {
        foreach ($this->allowedControllerTypes as $type) {
            if (is_a($class, $type, true)) {
                return $controller;
            }
        }
    }
    $r ??= new \ReflectionClass($class);
    foreach ($r->getAttributes() as $attribute) {
        if (isset($this->allowedControllerAttributes[$attribute->getName()])) {
            return $controller;
        }
    }
    if (str_contains($name, '@anonymous')) {
        $name = preg_replace_callback('/[a-zA-Z_\\x7f-\\xff][\\\\a-zA-Z0-9_\\x7f-\\xff]*+@anonymous\\x00.*?\\.php(?:0x?|:[0-9]++\\$)?[0-9a-fA-F]++/', fn($m) => class_exists($m[0], false) ? ((get_parent_class($m[0]) ?: key(class_implements($m[0]))) ?: 'class') . '@anonymous' : $m[0], $name);
    }
    throw new BadRequestException(\sprintf('Callable "%s()" is not allowed as a controller. Did you miss tagging it with "#[AsController]" or registering its type with "%s::allowControllers()"?', $name, self::class));
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal