class PathMatcher
Same name in other branches
- 9 core/lib/Drupal/Core/Path/PathMatcher.php \Drupal\Core\Path\PathMatcher
- 8.9.x core/lib/Drupal/Core/Path/PathMatcher.php \Drupal\Core\Path\PathMatcher
- 10 core/lib/Drupal/Core/Path/PathMatcher.php \Drupal\Core\Path\PathMatcher
Provides a path matcher.
Hierarchy
- class \Drupal\Core\Path\PathMatcher implements \Drupal\Core\Path\PathMatcherInterface
Expanded class hierarchy of PathMatcher
1 file declares its use of PathMatcher
- PathMatcherTest.php in core/
tests/ Drupal/ Tests/ Core/ Path/ PathMatcherTest.php
File
-
core/
lib/ Drupal/ Core/ Path/ PathMatcher.php, line 12
Namespace
Drupal\Core\PathView source
class PathMatcher implements PathMatcherInterface {
/**
* Whether the current page is the front page.
*
* @var bool
*/
protected $isCurrentFrontPage;
/**
* The default front page.
*
* @var string
*/
protected $frontPage;
/**
* The cache of regular expressions.
*
* @var array
*/
protected $regexes;
/**
* The config factory service.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
/**
* The current route match.
*
* @var \Drupal\Core\Routing\RouteMatchInterface
*/
protected $routeMatch;
/**
* Creates a new PathMatcher.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The config factory.
* @param \Drupal\Core\Routing\RouteMatchInterface $route_match
* The current route match.
*/
public function __construct(ConfigFactoryInterface $config_factory, RouteMatchInterface $route_match) {
$this->configFactory = $config_factory;
$this->routeMatch = $route_match;
}
/**
* {@inheritdoc}
*/
public function matchPath($path, $patterns) {
if (!isset($this->regexes[$patterns])) {
// Convert path settings to a regular expression.
$to_replace = [
// Replace newlines with a logical 'or'.
'/(\\r\\n?|\\n)/',
// Quote asterisks.
'/\\\\\\*/',
// Quote <front> keyword.
'/(^|\\|)\\\\<front\\\\>($|\\|)/',
];
$replacements = [
'|',
'.*',
'\\1' . preg_quote($this->getFrontPagePath(), '/') . '\\2',
];
$patterns_quoted = preg_quote($patterns, '/');
$this->regexes[$patterns] = '/^(' . preg_replace($to_replace, $replacements, $patterns_quoted) . ')$/';
}
return (bool) preg_match($this->regexes[$patterns], $path);
}
/**
* {@inheritdoc}
*/
public function isFrontPage() {
// Cache the result as this is called often.
if (!isset($this->isCurrentFrontPage)) {
$this->isCurrentFrontPage = FALSE;
// Ensure that the code can also be executed when there is no active
// route match, like on exception responses.
if ($this->routeMatch
->getRouteName()) {
$url = Url::fromRouteMatch($this->routeMatch);
$this->isCurrentFrontPage = $url->getRouteName() && '/' . $url->getInternalPath() === $this->getFrontPagePath();
}
}
return $this->isCurrentFrontPage;
}
/**
* Gets the current front page path.
*
* @return string
* The front page path.
*/
protected function getFrontPagePath() {
// Lazy-load front page config.
if (!isset($this->frontPage)) {
$this->frontPage = $this->configFactory
->get('system.site')
->get('page.front');
}
return $this->frontPage;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
PathMatcher::$configFactory | protected | property | The config factory service. | |
PathMatcher::$frontPage | protected | property | The default front page. | |
PathMatcher::$isCurrentFrontPage | protected | property | Whether the current page is the front page. | |
PathMatcher::$regexes | protected | property | The cache of regular expressions. | |
PathMatcher::$routeMatch | protected | property | The current route match. | |
PathMatcher::getFrontPagePath | protected | function | Gets the current front page path. | |
PathMatcher::isFrontPage | public | function | Checks if the current page is the front page. | Overrides PathMatcherInterface::isFrontPage |
PathMatcher::matchPath | public | function | Checks if a path matches any pattern in a set of patterns. | Overrides PathMatcherInterface::matchPath |
PathMatcher::__construct | public | function | Creates a new PathMatcher. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.