Issue #1976180 by katbailey: Fixed url_alter_test() module uses an event subscriber instead of a path processor.

8.0.x
Alex Pott 2013-04-24 11:05:28 +01:00
parent af11d7b2eb
commit 2d9a2c8ef9
3 changed files with 41 additions and 61 deletions

View File

@ -0,0 +1,39 @@
<?php
/**
* @file
* Contains Drupal\url_alter_test\PathProcessor.
*/
namespace Drupal\url_alter_test;
use Drupal\Core\PathProcessor\InboundPathProcessorInterface;
use Symfony\Component\HttpFoundation\Request;
/**
* Path processor for url_alter_test.
*/
class PathProcessor implements InboundPathProcessorInterface {
/**
* Implements Drupal\Core\PathProcessor\InboundPathProcessorInterface::processInbound().
*/
public function processInbound($path, Request $request) {
if (preg_match('!^user/([^/]+)(/.*)?!', $path, $matches)) {
if ($account = user_load_by_name($matches[1])) {
$matches += array(2 => '');
$path = 'user/' . $account->uid . $matches[2];
}
}
// Rewrite community/ to forum/.
if ($path == 'community' || strpos($path, 'community/') === 0) {
$path = 'forum' . substr($path, 9);
}
if ($path == 'url-alter-test/bar') {
$path = 'url-alter-test/foo';
}
return $path;
}
}

View File

@ -1,59 +0,0 @@
<?php
/**
* @file
* Contains Drupal\url_alter_test\PathSubscriber.
*/
namespace Drupal\url_alter_test;
use Drupal\Core\EventSubscriber\PathListenerBase;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Path subscriber for url_alter_test.
*/
class PathSubscriber extends PathListenerBase implements EventSubscriberInterface {
/**
* Resolve the system path based on some arbitrary rules.
*
* @param Symfony\Component\HttpKernel\Event\GetResponseEvent $event
* The Event to process.
*/
public function onKernelRequestPathResolve(GetResponseEvent $event) {
$request = $event->getRequest();
$path = $this->extractPath($request);
// Rewrite user/username to user/uid.
if (preg_match('!^user/([^/]+)(/.*)?!', $path, $matches)) {
if ($account = user_load_by_name($matches[1])) {
$matches += array(2 => '');
$path = 'user/' . $account->uid . $matches[2];
}
}
// Rewrite community/ to forum/.
if ($path == 'community' || strpos($path, 'community/') === 0) {
$path = 'forum' . substr($path, 9);
}
if ($path == 'url-alter-test/bar') {
$path = 'url-alter-test/foo';
}
$this->setPath($request, $path);
}
/**
* Registers the methods in this class that should be listeners.
*
* @return array
* An array of event listener definitions.
*/
static function getSubscribedEvents() {
$events[KernelEvents::REQUEST][] = array('onKernelRequestPathResolve', 100);
return $events;
}
}

View File

@ -1,5 +1,5 @@
services:
url_alter_test.path_subscriber:
class: Drupal\url_alter_test\PathSubscriber
class: Drupal\url_alter_test\PathProcessor
tags:
- { name: event_subscriber }
- { name: path_processor_inbound, priority: 800 }