class ResourceRoutes in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/rest/src/Routing/ResourceRoutes.php \Drupal\rest\Routing\ResourceRoutes
Subscriber for REST-style routes.
Hierarchy
- class \Drupal\Core\Routing\RouteSubscriberBase implements EventSubscriberInterface- class \Drupal\rest\Routing\ResourceRoutes
 
Expanded class hierarchy of ResourceRoutes
1 string reference to 'ResourceRoutes'
- rest.services.yml in core/modules/ rest/ rest.services.yml 
- core/modules/rest/rest.services.yml
1 service uses ResourceRoutes
- rest.resource_routes in core/modules/ rest/ rest.services.yml 
- Drupal\rest\Routing\ResourceRoutes
File
- core/modules/ rest/ src/ Routing/ ResourceRoutes.php, line 19 
- Contains \Drupal\rest\Routing\ResourceRoutes.
Namespace
Drupal\rest\RoutingView source
class ResourceRoutes extends RouteSubscriberBase {
  /**
   * The plugin manager for REST plugins.
   *
   * @var \Drupal\rest\Plugin\Type\ResourcePluginManager
   */
  protected $manager;
  /**
   * The Drupal configuration factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $config;
  /**
   * A logger instance.
   *
   * @var \Psr\Log\LoggerInterface
   */
  protected $logger;
  /**
   * Constructs a RouteSubscriber object.
   *
   * @param \Drupal\rest\Plugin\Type\ResourcePluginManager $manager
   *   The resource plugin manager.
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config
   *   The configuration factory holding resource settings.
   * @param \Psr\Log\LoggerInterface $logger
   *   A logger instance.
   */
  public function __construct(ResourcePluginManager $manager, ConfigFactoryInterface $config, LoggerInterface $logger) {
    $this->manager = $manager;
    $this->config = $config;
    $this->logger = $logger;
  }
  /**
   * Alters existing routes for a specific collection.
   *
   * @param \Symfony\Component\Routing\RouteCollection $collection
   *   The route collection for adding routes.
   * @return array
   */
  protected function alterRoutes(RouteCollection $collection) {
    $routes = array();
    $enabled_resources = $this->config
      ->get('rest.settings')
      ->get('resources') ?: array();
    // Iterate over all enabled resource plugins.
    foreach ($enabled_resources as $id => $enabled_methods) {
      $plugin = $this->manager
        ->getInstance(array(
        'id' => $id,
      ));
      foreach ($plugin
        ->routes() as $name => $route) {
        // @todo: Are multiple methods possible here?
        $methods = $route
          ->getMethods();
        // Only expose routes where the method is enabled in the configuration.
        if ($methods && ($method = $methods[0]) && $method && isset($enabled_methods[$method])) {
          $route
            ->setRequirement('_access_rest_csrf', 'TRUE');
          // Check that authentication providers are defined.
          if (empty($enabled_methods[$method]['supported_auth']) || !is_array($enabled_methods[$method]['supported_auth'])) {
            $this->logger
              ->error('At least one authentication provider must be defined for resource @id', array(
              ':id' => $id,
            ));
            continue;
          }
          // Check that formats are defined.
          if (empty($enabled_methods[$method]['supported_formats']) || !is_array($enabled_methods[$method]['supported_formats'])) {
            $this->logger
              ->error('At least one format must be defined for resource @id', array(
              ':id' => $id,
            ));
            continue;
          }
          // If the route has a format requirement, then verify that the
          // resource has it.
          $format_requirement = $route
            ->getRequirement('_format');
          if ($format_requirement && !in_array($format_requirement, $enabled_methods[$method]['supported_formats'])) {
            continue;
          }
          // The configuration seems legit at this point, so we set the
          // authentication provider and add the route.
          $route
            ->setOption('_auth', $enabled_methods[$method]['supported_auth']);
          $routes["rest.{$name}"] = $route;
          $collection
            ->add("rest.{$name}", $route);
        }
      }
    }
  }
}Members
| Name   | Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| ResourceRoutes:: | protected | property | The Drupal configuration factory. | |
| ResourceRoutes:: | protected | property | A logger instance. | |
| ResourceRoutes:: | protected | property | The plugin manager for REST plugins. | |
| ResourceRoutes:: | protected | function | Alters existing routes for a specific collection. Overrides RouteSubscriberBase:: | |
| ResourceRoutes:: | public | function | Constructs a RouteSubscriber object. | |
| RouteSubscriberBase:: | public static | function | Returns an array of event names this subscriber wants to listen to. Overrides EventSubscriberInterface:: | 5 | 
| RouteSubscriberBase:: | public | function | Delegates the route altering to self::alterRoutes(). | 1 | 
