/src/Symfony/Bundle/FrameworkBundle/RequestListener.php

https://github.com/come/symfony · PHP · 80 lines · 47 code · 11 blank · 22 comment · 4 complexity · 5060df5e3bc66d0e08994ac4fe64c574 MD5 · raw file

  1. <?php
  2. namespace Symfony\Bundle\FrameworkBundle;
  3. use Symfony\Components\HttpKernel\LoggerInterface;
  4. use Symfony\Components\DependencyInjection\ContainerInterface;
  5. use Symfony\Components\EventDispatcher\EventDispatcher;
  6. use Symfony\Components\EventDispatcher\Event;
  7. use Symfony\Components\Routing\RouterInterface;
  8. use Symfony\Components\HttpKernel\HttpKernelInterface;
  9. /*
  10. * This file is part of the Symfony framework.
  11. *
  12. * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  13. *
  14. * This source file is subject to the MIT license that is bundled
  15. * with this source code in the file LICENSE.
  16. */
  17. /**
  18. * RequestListener.
  19. *
  20. * @package Symfony
  21. * @subpackage Bundle_FrameworkBundle
  22. * @author Fabien Potencier <fabien.potencier@symfony-project.com>
  23. */
  24. class RequestListener
  25. {
  26. protected $container;
  27. protected $router;
  28. protected $logger;
  29. public function __construct(ContainerInterface $container, RouterInterface $router, LoggerInterface $logger = null)
  30. {
  31. $this->container = $container;
  32. $this->router = $router;
  33. $this->logger = $logger;
  34. }
  35. /**
  36. * Registers a core.request listener.
  37. *
  38. * @param Symfony\Components\EventDispatcher\EventDispatcher $dispatcher An EventDispatcher instance
  39. */
  40. public function register(EventDispatcher $dispatcher)
  41. {
  42. $dispatcher->connect('core.request', array($this, 'resolve'));
  43. }
  44. public function resolve(Event $event)
  45. {
  46. $request = $event->getParameter('request');
  47. if (HttpKernelInterface::MASTER_REQUEST === $event->getParameter('request_type')) {
  48. // set the context even if the parsing does not need to be done
  49. // to have correct link generation
  50. $this->router->setContext(array(
  51. 'base_url' => $request->getBaseUrl(),
  52. 'method' => $request->getMethod(),
  53. 'host' => $request->getHost(),
  54. 'is_secure' => $request->isSecure(),
  55. ));
  56. }
  57. if ($request->attributes->has('_controller')) {
  58. return;
  59. }
  60. if (false !== $parameters = $this->router->match($request->getPathInfo())) {
  61. if (null !== $this->logger) {
  62. $this->logger->info(sprintf('Matched route "%s" (parameters: %s)', $parameters['_route'], str_replace("\n", '', var_export($parameters, true))));
  63. }
  64. $request->attributes->replace($parameters);
  65. } elseif (null !== $this->logger) {
  66. $this->logger->err(sprintf('No route found for %s', $request->getPathInfo()));
  67. }
  68. }
  69. }