AliasPathMatcher.php
Namespace
Drupal\path_aliasFile
-
core/
modules/ path_alias/ src/ AliasPathMatcher.php
View source
<?php
namespace Drupal\path_alias;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Path\PathMatcherInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Url;
use Symfony\Component\DependencyInjection\Attribute\AutowireDecorated;
/**
* Extends the default path matcher to check aliases.
*/
class AliasPathMatcher implements PathMatcherInterface {
/**
* Whether the current page is the front page.
*/
protected ?bool $isCurrentFrontPage = NULL;
public function __construct(#[AutowireDecorated] protected PathMatcherInterface $decorated, protected RouteMatchInterface $routeMatch, protected AliasManagerInterface $aliasManager, protected ConfigFactoryInterface $configFactory) {
}
/**
* {@inheritdoc}
*/
public function matchPath($path, $patterns) {
return $this->decorated
->matchPath($path, $patterns);
}
/**
* {@inheritdoc}
*/
public function isFrontPage() {
// Cache the result as this is called often.
$this->isCurrentFrontPage ??= $this->decorated
->isFrontPage() || $this->isAliasFrontPage();
return $this->isCurrentFrontPage;
}
/**
* Checks if the current page is the front page by comparing aliases.
*/
protected function isAliasFrontPage() : bool {
// Ensure that the code can also be executed when there is no active
// route match, like on exception responses.
if (!$this->routeMatch
->getRouteName()) {
return FALSE;
}
$url = Url::fromRouteMatch($this->routeMatch);
$path = '/' . $url->getInternalPath();
$frontPagePath = $this->configFactory
->get('system.site')
->get('page.front');
return $this->aliasManager
->getAliasByPath($path) === $frontPagePath;
}
}
Classes
| Title | Deprecated | Summary |
|---|---|---|
| AliasPathMatcher | Extends the default path matcher to check aliases. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.