class MongodbRouterDumper in MongoDB 8
Hierarchy
- class \Drupal\mongodb\MongodbRouterDumper implements MatcherDumperInterface
Expanded class hierarchy of MongodbRouterDumper
1 string reference to 'MongodbRouterDumper'
1 service uses MongodbRouterDumper
File
- src/MongodbRouterDumper.php, line 14 
- Definition of Drupal\mongodb\MongoKeyValueFactory.
Namespace
Drupal\mongodbView source
class MongodbRouterDumper implements MatcherDumperInterface {
  const ROUTE_COLLECTION = 'routing';
  /**
   * @var \Drupal\mongoDb\MongoCollectionFactory $mongo
   */
  protected $mongo;
  /**
   * The routes to be dumped.
   *
   * @var \Symfony\Component\Routing\RouteCollection
   */
  protected $routes;
  /**
   * The state.
   *
   * @var \Drupal\Core\State\State
   */
  protected $state;
  /**
   * @param \Drupal\mongoDb\MongoCollectionFactory $mongo
   */
  function __construct(MongoCollectionFactory $mongo, State $state) {
    $this->mongo = $mongo;
    $this->state = $state;
  }
  /**
   * {@inheritdoc}
   */
  public function addRoutes(RouteCollection $routes) {
    if (empty($this->routes)) {
      $this->routes = $routes;
    }
    else {
      $this->routes
        ->addCollection($routes);
    }
  }
  /**
   * {@inheritdoc}
   */
  public function getRoutes() {
    return $this->routes;
  }
  /**
   * {@inheritdoc}
   */
  public function dump(array $options = []) {
    $collection = $this->mongo
      ->get(static::ROUTE_COLLECTION);
    // If there are no new routes, just delete any previously existing of this
    // provider.
    $provider = isset($options['provider']) ? $options['provider'] : '';
    if (empty($this->routes) || !count($this->routes)) {
      $collection
        ->remove(array(
        'provider' => $provider,
      ));
    }
    else {
      $names = array();
      $masks = array_flip($this->state
        ->get('routing.menu_masks.' . static::ROUTE_COLLECTION, array()));
      foreach ($this->routes as $name => $route) {
        $name = (string) $name;
        $names[] = $name;
        /** @var \Symfony\Component\Routing\Route $route */
        $route
          ->setOption('compiler_class', '\\Drupal\\Core\\Routing\\RouteCompiler');
        /** @var \Drupal\Core\Routing\CompiledRoute $compiled */
        $compiled = $route
          ->compile();
        $masks[$compiled
          ->getFit()] = 1;
        $options = $route
          ->getOptions();
        unset($options['compiler_class']);
        $pattern_outline = $compiled
          ->getPatternOutline();
        $route_array = array_filter(array(
          'path' => $route
            ->getPath(),
          'defaults' => $route
            ->getDefaults(),
          'requirements' => $route
            ->getRequirements(),
          'options' => $options,
          'host' => $route
            ->getHost(),
          'schemes' => $route
            ->getSchemes(),
          'methods' => $route
            ->getMethods(),
          'condition' => $route
            ->getCondition(),
        ));
        unset($route_array['requirements']['_method']);
        if (isset($route_array['methods']) && $route_array['methods'] === array(
          'GET',
          'POST',
        )) {
          unset($route_array['methods']);
        }
        if ($route_array['path'] === $pattern_outline) {
          unset($route_array['path']);
        }
        $collection
          ->update(array(
          '_id' => $name,
        ), array(
          '_id' => $name,
          'provider' => $provider,
          'fit' => $compiled
            ->getFit(),
          'pattern_outline' => $pattern_outline,
        ) + $route_array, array(
          'upsert' => TRUE,
        ));
      }
      // Sort the masks so they are in order of descending fit.
      $masks = array_keys($masks);
      rsort($masks);
      $this->state
        ->set('routing.menu_masks.' . static::ROUTE_COLLECTION, $masks);
      $collection
        ->remove(array(
        'provider' => $provider,
        '_id' => array(
          '$nin' => $names,
        ),
      ));
    }
    // The dumper is reused for multiple providers, so reset the queued routes.
    $this->routes = NULL;
  }
}Members
| Name   | Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| MongodbRouterDumper:: | protected | property | ||
| MongodbRouterDumper:: | protected | property | The routes to be dumped. | |
| MongodbRouterDumper:: | protected | property | The state. | |
| MongodbRouterDumper:: | public | function | Adds additional routes to be dumped. Overrides MatcherDumperInterface:: | |
| MongodbRouterDumper:: | public | function | ||
| MongodbRouterDumper:: | public | function | ||
| MongodbRouterDumper:: | constant | |||
| MongodbRouterDumper:: | function | 
