PathProcessorTest.php

Same filename in this branch
  1. 9 core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php
Same filename in other branches
  1. 8.9.x core/modules/system/tests/modules/url_alter_test/src/PathProcessorTest.php
  2. 8.9.x core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php
  3. 10 core/modules/forum/tests/modules/forum_url_alter_test/src/PathProcessorTest.php
  4. 10 core/modules/system/tests/modules/url_alter_test/src/PathProcessorTest.php
  5. 10 core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php
  6. 11.x core/modules/forum/tests/modules/forum_url_alter_test/src/PathProcessorTest.php
  7. 11.x core/modules/system/tests/modules/url_alter_test/src/PathProcessorTest.php
  8. 11.x core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php

Namespace

Drupal\url_alter_test

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;

/**
 * Path processor for url_alter_test.
 */
class PathProcessorTest implements InboundPathProcessorInterface, OutboundPathProcessorInterface {
    
    /**
     * {@inheritdoc}
     */
    public function processInbound($path, Request $request) {
        // Rewrite user/username to user/uid.
        if (preg_match('!^/user/([^/]+)(/.*)?!', $path, $matches)) {
            if ($account = user_load_by_name($matches[1])) {
                $matches += [
                    2 => '',
                ];
                $path = '/user/' . $account->id() . $matches[2];
            }
        }
        // Rewrite community/ to forum/.
        $path = preg_replace('@^/community(.*)@', '/forum$1', $path);
        if ($path == '/url-alter-test/bar') {
            $path = '/url-alter-test/foo';
        }
        return $path;
    }
    
    /**
     * {@inheritdoc}
     */
    public function processOutbound($path, &$options = [], Request $request = NULL, BubbleableMetadata $bubbleable_metadata = NULL) {
        // Rewrite user/uid to user/username.
        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());
                }
            }
        }
        // Verify that $options are alterable.
        if ($path == '/user/login') {
            $options['query']['foo'] = 'bar';
        }
        // Rewrite forum/ to community/.
        return preg_replace('@^/forum(.*)@', '/community$1', $path);
    }

}

Classes

Title Deprecated Summary
PathProcessorTest Path processor for url_alter_test.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.