Issue #1976180 by katbailey: Fixed url_alter_test() module uses an event subscriber instead of a path processor.
parent
af11d7b2eb
commit
2d9a2c8ef9
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,5 @@
|
||||||
services:
|
services:
|
||||||
url_alter_test.path_subscriber:
|
url_alter_test.path_subscriber:
|
||||||
class: Drupal\url_alter_test\PathSubscriber
|
class: Drupal\url_alter_test\PathProcessor
|
||||||
tags:
|
tags:
|
||||||
- { name: event_subscriber }
|
- { name: path_processor_inbound, priority: 800 }
|
||||||
|
|
Loading…
Reference in New Issue