Same name and namespace in other branches
  1. 8.9.x core/lib/Drupal/Core/Access/AccessManager.php \Drupal\Core\Access\AccessManager::checkNamedRoute()
  2. 9 core/lib/Drupal/Core/Access/AccessManager.php \Drupal\Core\Access\AccessManager::checkNamedRoute()

File

core/lib/Drupal/Core/Access/AccessManager.php, line 82

Class

AccessManager
Attaches access check services to routes and runs them on request.

Namespace

Drupal\Core\Access

Code

public function checkNamedRoute($route_name, array $parameters = [], AccountInterface $account = NULL, $return_as_object = FALSE) {
  try {
    $route = $this->routeProvider
      ->getRouteByName($route_name);

    // ParamConverterManager relies on the route name and object being
    // available from the parameters array.
    $parameters[RouteObjectInterface::ROUTE_NAME] = $route_name;
    $parameters[RouteObjectInterface::ROUTE_OBJECT] = $route;
    $upcasted_parameters = $this->paramConverterManager
      ->convert($parameters + $route
      ->getDefaults());
    $route_match = new RouteMatch($route_name, $route, $upcasted_parameters, $parameters);
    return $this
      ->check($route_match, $account, NULL, $return_as_object);
  } catch (RouteNotFoundException $e) {

    // Cacheable until extensions change.
    $result = AccessResult::forbidden()
      ->addCacheTags([
      'config:core.extension',
    ]);
    return $return_as_object ? $result : $result
      ->isAllowed();
  } catch (ParamNotConvertedException $e) {

    // Uncacheable because conversion of the parameter may not have been
    // possible due to dynamic circumstances.
    $result = AccessResult::forbidden()
      ->setCacheMaxAge(0);
    return $return_as_object ? $result : $result
      ->isAllowed();
  }
}