You are here

public function ControllerResolver::getControllerFromDefinition in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Controller/ControllerResolver.php \Drupal\Core\Controller\ControllerResolver::getControllerFromDefinition()

Returns the Controller instance with a given controller route definition.

As several resolvers can exist for a single application, a resolver must return false when it is not able to determine the controller.

Parameters

mixed $controller: The controller attribute like in $request->attributes->get('_controller')

Return value

mixed|bool A PHP callable representing the Controller, or false if this resolver is not able to determine the controller

Throws

\InvalidArgumentException|\LogicException Thrown if the controller can't be found.

Overrides ControllerResolverInterface::getControllerFromDefinition

See also

\Symfony\Component\HttpKernel\Controller\ControllerResolverInterface::getController()

1 call to ControllerResolver::getControllerFromDefinition()
ControllerResolver::getController in core/lib/Drupal/Core/Controller/ControllerResolver.php
This method looks for a '_controller' request attribute that represents the controller name (a string like ClassName::MethodName).

File

core/lib/Drupal/Core/Controller/ControllerResolver.php, line 66
Contains \Drupal\Core\Controller\ControllerResolver.

Class

ControllerResolver
ControllerResolver to enhance controllers beyond Symfony's basic handling.

Namespace

Drupal\Core\Controller

Code

public function getControllerFromDefinition($controller, $path = '') {
  if (is_array($controller) || is_object($controller) && method_exists($controller, '__invoke')) {
    return $controller;
  }
  if (strpos($controller, ':') === FALSE) {
    if (function_exists($controller)) {
      return $controller;
    }
    elseif (method_exists($controller, '__invoke')) {
      return new $controller();
    }
  }
  $callable = $this
    ->createController($controller);
  if (!is_callable($callable)) {
    throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable.', $path));
  }
  return $callable;
}