annotate core/modules/views/src/Routing/ViewPageController.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\views\Routing;
Chris@0 4
Chris@0 5 use Drupal\Core\Routing\RouteMatchInterface;
Chris@0 6 use Drupal\views\Plugin\views\display\Page;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Defines a page controller to execute and render a view.
Chris@0 10 */
Chris@0 11 class ViewPageController {
Chris@0 12
Chris@0 13 /**
Chris@0 14 * Handler a response for a given view and display.
Chris@0 15 *
Chris@0 16 * @param string $view_id
Chris@0 17 * The ID of the view
Chris@0 18 * @param string $display_id
Chris@0 19 * The ID of the display.
Chris@0 20 * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
Chris@0 21 * The route match.
Chris@0 22 * @return null|void
Chris@0 23 */
Chris@0 24 public function handle($view_id, $display_id, RouteMatchInterface $route_match) {
Chris@0 25 $args = [];
Chris@0 26 $route = $route_match->getRouteObject();
Chris@0 27 $map = $route->hasOption('_view_argument_map') ? $route->getOption('_view_argument_map') : [];
Chris@0 28
Chris@0 29 foreach ($map as $attribute => $parameter_name) {
Chris@0 30 // Allow parameters be pulled from the request.
Chris@0 31 // The map stores the actual name of the parameter in the request. Views
Chris@0 32 // which override existing controller, use for example 'node' instead of
Chris@0 33 // arg_nid as name.
Chris@0 34 if (isset($map[$attribute])) {
Chris@0 35 $attribute = $map[$attribute];
Chris@0 36 }
Chris@0 37 if ($arg = $route_match->getRawParameter($attribute)) {
Chris@0 38 }
Chris@0 39 else {
Chris@0 40 $arg = $route_match->getParameter($attribute);
Chris@0 41 }
Chris@0 42
Chris@0 43 if (isset($arg)) {
Chris@0 44 $args[] = $arg;
Chris@0 45 }
Chris@0 46 }
Chris@0 47
Chris@0 48 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase $class */
Chris@0 49 $class = $route->getOption('_view_display_plugin_class');
Chris@0 50 if ($route->getOption('returns_response')) {
Chris@0 51 /** @var \Drupal\views\Plugin\views\display\ResponseDisplayPluginInterface $class */
Chris@0 52 return $class::buildResponse($view_id, $display_id, $args);
Chris@0 53 }
Chris@0 54 else {
Chris@0 55 $build = $class::buildBasicRenderable($view_id, $display_id, $args, $route);
Chris@0 56 Page::setPageRenderArray($build);
Chris@0 57
Chris@0 58 views_add_contextual_links($build, 'page', $display_id, $build);
Chris@0 59
Chris@0 60 return $build;
Chris@0 61 }
Chris@0 62 }
Chris@0 63
Chris@0 64 }