function ViewPageController::handle

Same name in other branches
  1. 8.9.x core/modules/views/src/Routing/ViewPageController.php \Drupal\views\Routing\ViewPageController::handle()
  2. 10 core/modules/views/src/Routing/ViewPageController.php \Drupal\views\Routing\ViewPageController::handle()
  3. 11.x core/modules/views/src/Routing/ViewPageController.php \Drupal\views\Routing\ViewPageController::handle()

Handler a response for a given view and display.

Parameters

string $view_id: The ID of the view

string $display_id: The ID of the display.

\Drupal\Core\Routing\RouteMatchInterface $route_match: The route match.

Return value

array|\Symfony\Component\HttpFoundation\Response A render array or a Response object.

File

core/modules/views/src/Routing/ViewPageController.php, line 29

Class

ViewPageController
Defines a page controller to execute and render a view.

Namespace

Drupal\views\Routing

Code

public function handle($view_id, $display_id, RouteMatchInterface $route_match) {
    $args = [];
    $route = $route_match->getRouteObject();
    $map = $route->hasOption('_view_argument_map') ? $route->getOption('_view_argument_map') : [];
    foreach ($map as $attribute => $parameter_name) {
        // Allow parameters be pulled from the request.
        // The map stores the actual name of the parameter in the request. Views
        // which override existing controller, use for example 'node' instead of
        // arg_nid as name.
        if (isset($map[$attribute])) {
            $attribute = $map[$attribute];
        }
        if ($arg = $route_match->getRawParameter($attribute)) {
        }
        else {
            $arg = $route_match->getParameter($attribute);
        }
        if (isset($arg)) {
            $args[] = $arg;
        }
    }
    $class = $route->getOption('_view_display_plugin_class');
    if ($route->getOption('returns_response')) {
        
        /** @var \Drupal\views\Plugin\views\display\ResponseDisplayPluginInterface $class */
        return $class::buildResponse($view_id, $display_id, $args);
    }
    else {
        
        /** @var \Drupal\views\Plugin\views\display\Page $class */
        $build = $class::buildBasicRenderable($view_id, $display_id, $args, $route);
        Page::setPageRenderArray($build);
        views_add_contextual_links($build, 'page', $display_id, $build);
        return $build;
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.