Mercurial > hg > cmmr2012-drupal-site
diff core/modules/views/src/Routing/ViewPageController.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/views/src/Routing/ViewPageController.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,64 @@ +<?php + +namespace Drupal\views\Routing; + +use Drupal\Core\Routing\RouteMatchInterface; +use Drupal\views\Plugin\views\display\Page; + +/** + * Defines a page controller to execute and render a view. + */ +class ViewPageController { + + /** + * Handler a response for a given view and display. + * + * @param string $view_id + * The ID of the view + * @param string $display_id + * The ID of the display. + * @param \Drupal\Core\Routing\RouteMatchInterface $route_match + * The route match. + * @return null|void + */ + 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; + } + } + + /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase $class */ + $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 { + $build = $class::buildBasicRenderable($view_id, $display_id, $args, $route); + Page::setPageRenderArray($build); + + views_add_contextual_links($build, 'page', $display_id, $build); + + return $build; + } + } + +}