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 |