aliasManager = $alias_manager; } /** * Resolve the system path. * * @param Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The Event to process. */ public function onKernelRequestPathResolve(GetResponseEvent $event) { $request = $event->getRequest(); $path = $this->extractPath($request); $path = $this->aliasManager->getSystemPath($path); $this->setPath($request, $path); // If this is the master request, set the cache key for the caching of all // system paths looked up during the request. if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) { $this->aliasManager->setCacheKey($path); } } /** * Ensures system paths for the request get cached. */ public function onKernelTerminate(PostResponseEvent $event) { $this->aliasManager->writeCache(); } /** * Resolve the front-page default path. * * @todo The path system should be objectified to remove the function calls in * this method. * * @param Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The Event to process. */ public function onKernelRequestFrontPageResolve(GetResponseEvent $event) { $request = $event->getRequest(); $path = $this->extractPath($request); if (empty($path)) { // @todo Temporary hack. Fix when configuration is injectable. $path = config('system.site')->get('page.front'); if (empty($path)) { $path = 'user'; } } $this->setPath($request, $path); } /** * Decode language information embedded in the request path. * * @param Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The Event to process. */ public function onKernelRequestLanguageResolve(GetResponseEvent $event) { $request = $event->getRequest(); $path = _language_resolved_path(); if ($path !== NULL) { $this->setPath($request, $path); } } /** * Decodes the path of the request. * * Parameters in the URL sometimes represent code-meaningful strings. It is * therefore useful to always urldecode() those values so that individual * controllers need not concern themselves with it. This is Drupal-specific * logic and may not be familiar for developers used to other Symfony-family * projects. * * @todo Revisit whether or not this logic is appropriate for here or if * controllers should be required to implement this logic themselves. If we * decide to keep this code, remove this TODO. * * @param Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The Event to process. */ public function onKernelRequestDecodePath(GetResponseEvent $event) { $request = $event->getRequest(); $path = $this->extractPath($request); $path = urldecode($path); $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('onKernelRequestDecodePath', 200); $events[KernelEvents::REQUEST][] = array('onKernelRequestLanguageResolve', 150); $events[KernelEvents::REQUEST][] = array('onKernelRequestFrontPageResolve', 101); $events[KernelEvents::REQUEST][] = array('onKernelRequestPathResolve', 100); $events[KernelEvents::TERMINATE][] = array('onKernelTerminate', 200); return $events; } }