PathProcessorTest.php in Drupal 8
File
core/modules/system/tests/modules/url_alter_test/src/PathProcessorTest.php
View source
<?php
namespace Drupal\url_alter_test;
use Drupal\Core\PathProcessor\InboundPathProcessorInterface;
use Drupal\Core\PathProcessor\OutboundPathProcessorInterface;
use Drupal\Core\Render\BubbleableMetadata;
use Symfony\Component\HttpFoundation\Request;
use Drupal\user\Entity\User;
class PathProcessorTest implements InboundPathProcessorInterface, OutboundPathProcessorInterface {
public function processInbound($path, Request $request) {
if (preg_match('!^/user/([^/]+)(/.*)?!', $path, $matches)) {
if ($account = user_load_by_name($matches[1])) {
$matches += [
2 => '',
];
$path = '/user/' . $account
->id() . $matches[2];
}
}
$path = preg_replace('@^/community(.*)@', '/forum$1', $path);
if ($path == '/url-alter-test/bar') {
$path = '/url-alter-test/foo';
}
return $path;
}
public function processOutbound($path, &$options = [], Request $request = NULL, BubbleableMetadata $bubbleable_metadata = NULL) {
if (preg_match('!^/user/([0-9]+)(/.*)?!', $path, $matches)) {
if ($account = User::load($matches[1])) {
$matches += [
2 => '',
];
$path = '/user/' . $account
->getAccountName() . $matches[2];
if ($bubbleable_metadata) {
$bubbleable_metadata
->addCacheTags($account
->getCacheTags());
}
}
}
if ($path == '/user/login') {
$options['query']['foo'] = 'bar';
}
return preg_replace('@^/forum(.*)@', '/community$1', $path);
}
}