cforge-2.0.x-dev/src/EventSubscriber/RouteSubscriber.php

src/EventSubscriber/RouteSubscriber.php
<?php

namespace Drupal\cforge\EventSubscriber;

use Drupal\Core\Routing\RouteSubscriberBase;
use Drupal\Core\Routing\RoutingEvents;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;

/**
 * Alter routes.
 *
 * Change some routes into admin routes. Change some route titles.
 */
class RouteSubscriber extends RouteSubscriberBase {

  /**
   * {@inheritDoc}
   *
   * Anything the committee does shouldn't be an admin_route.
   */
  protected function alterRoutes(RouteCollection $collection) {
    $route_names = [
      'entity.taxonomy_term.edit_form',
      'entity.taxonomy_term.delete_form',
      'entity.user.edit_form',
    ];
    foreach ($collection as $route_name => &$route) {
      if (in_array($route_name, $route_names)) {
        $route->setOption('_admin_route', FALSE);
      }
    }
    // These routes have new links for committee in the tools menu.
    $collection->get('entity.user.collection')
      ->setDefault('_title', t('Manage @name', ['@name' => t('People')]));
    $collection->get('system.admin_content')
      ->setDefault('_title', t('Manage @name', ['@name' => t('Content')]))
      ->setRequirements(['_permission' => 'access content overview']);

    // Hamlets theme does not permit the adding of new menus.
    if ($route = $collection->get('entity.menu.add_form')) {
      $route->setRequirement('_permission', '_none_');
    }

    // Setup route only appears if no users have been created.
    $uids = \Drupal::entityTypeManager()->getStorage('user')->getQuery()->accessCheck(FALSE)->execute();
    if (count($uids) < 3) {
      $route = (new Route('cforge/setup'))
        ->setDefaults(['_form' => 'Drupal\cforge\Setup', '_title' => 'Installation options'])
        ->setRequirement('_permission', 'access administration pages');
      $collection->add('cforge.setup', $route);
    }
    // Make all page titles under user/ the same
    // If not overridden, this works for non-views pages
    foreach ($collection->all() as $rid => $route) {
      if (substr($route->getPath(), 0, 12) == '/user/{user}') {
        $route->setDefault('_title_callback', '\Drupal\cforge\Controller\General::userTitle');
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() : array {
    $events[RoutingEvents::ALTER][] = 'onAlterRoutes';
    return $events;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc