Renamed EventArgs classes and adapted remaining code to EventManager

The only missing part is ContainerAwareEventManager::addEventSubscriberService(),
because I'm not sure how to find out the class name of a service in the DIC.

Also, inline documentation of this code needs to be finished once it is accepted.
This commit is contained in:
Bernhard Schussek 2011-03-07 15:42:52 +01:00
parent a54d3e6fb0
commit 2cf3779a2c
59 changed files with 594 additions and 535 deletions

View File

@ -14,26 +14,27 @@ namespace Symfony\Bundle\AsseticBundle\CacheWarmer;
use Assetic\AssetManager; use Assetic\AssetManager;
use Assetic\AssetWriter; use Assetic\AssetWriter;
use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmer; use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmer;
use Symfony\Component\EventDispatcher\Event; use Symfony\Bundle\AsseticBundle\Event\WriteEventArgs;
use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Bundle\AsseticBundle\Events;
use Doctrine\Common\EventManager;
class AssetWriterCacheWarmer extends CacheWarmer class AssetWriterCacheWarmer extends CacheWarmer
{ {
protected $am; protected $am;
protected $writer; protected $writer;
protected $dispatcher; protected $evm;
public function __construct(AssetManager $am, AssetWriter $writer, EventDispatcher $dispatcher) public function __construct(AssetManager $am, AssetWriter $writer, EventManager $evm)
{ {
$this->am = $am; $this->am = $am;
$this->writer = $writer; $this->writer = $writer;
$this->dispatcher = $dispatcher; $this->evm = $evm;
} }
public function warmUp($cacheDir) public function warmUp($cacheDir)
{ {
// notify an event so custom stream wrappers can be registered lazily // notify an event so custom stream wrappers can be registered lazily
$this->dispatcher->notify(new Event(null, 'assetic.write')); $this->evm->dispatchEvent(Events::onAsseticWrite, new WriteEventArgs());
$this->writer->writeManagerAssets($this->am); $this->writer->writeManagerAssets($this->am);
} }

View File

@ -14,11 +14,13 @@ namespace Symfony\Bundle\AsseticBundle\Command;
use Assetic\Asset\AssetInterface; use Assetic\Asset\AssetInterface;
use Assetic\Factory\LazyAssetManager; use Assetic\Factory\LazyAssetManager;
use Symfony\Bundle\FrameworkBundle\Command\Command; use Symfony\Bundle\FrameworkBundle\Command\Command;
use Symfony\Bundle\AsseticBundle\Event\WriteEventArgs;
use Symfony\Bundle\AsseticBundle\Events;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\EventDispatcher\Event; use Doctrine\Common\EventManager;
/** /**
* Dumps assets to the filesystem. * Dumps assets to the filesystem.
@ -46,7 +48,8 @@ class DumpCommand extends Command
$am = $this->container->get('assetic.asset_manager'); $am = $this->container->get('assetic.asset_manager');
// notify an event so custom stream wrappers can be registered lazily // notify an event so custom stream wrappers can be registered lazily
$this->container->get('event_dispatcher')->notify(new Event(null, 'assetic.write', array('path' => $basePath))); $eventArgs = new WriteEventArgs($basePath);
$this->container->get('event_manager')->dispatchEvent(Events::onAsseticWrite, $writeEventArgs);
if ($input->getOption('watch')) { if ($input->getOption('watch')) {
return $this->watch($am, $basePath, $output, $this->container->getParameter('kernel.debug')); return $this->watch($am, $basePath, $output, $this->container->getParameter('kernel.debug'));

View File

@ -0,0 +1,32 @@
<?php
/*
* This file is part of the Symfony framework.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace Symfony\Bundle\AsseticBundle\Event;
use Doctrine\Common\EventArgs;
/**
* @author Bernhard Schussek <bernhard.schussek@symfony-project.com>
*/
class WriteEventArgs extends EventArgs
{
private $targetPath;
public function __construct($targetPath = null)
{
$this->targetPath = $targetPath;
}
public function getTargetPath()
{
return $this->targetPath;
}
}

View File

@ -0,0 +1,20 @@
<?php
/*
* This file is part of the Symfony framework.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace Symfony\Bundle\AsseticBundle;
/**
* @author Bernhard Schussek <bernhard.schussek@symfony-project.com>
*/
final class Events
{
const onAsseticWrite = 'onAsseticWrite';
}

View File

@ -12,7 +12,8 @@
namespace Symfony\Bundle\AsseticBundle\Tests\CacheWarmer; namespace Symfony\Bundle\AsseticBundle\Tests\CacheWarmer;
use Symfony\Bundle\AsseticBundle\CacheWarmer\AssetWriterCacheWarmer; use Symfony\Bundle\AsseticBundle\CacheWarmer\AssetWriterCacheWarmer;
use Symfony\Component\EventDispatcher\Event; use Symfony\Bundle\AsseticBundle\Event\WriteEventArgs;
use Symfony\Bundle\AsseticBundle\Events;
class AssetWriterCacheWarmerTest extends \PHPUnit_Framework_TestCase class AssetWriterCacheWarmerTest extends \PHPUnit_Framework_TestCase
{ {
@ -29,18 +30,18 @@ class AssetWriterCacheWarmerTest extends \PHPUnit_Framework_TestCase
$writer = $this->getMockBuilder('Assetic\\AssetWriter') $writer = $this->getMockBuilder('Assetic\\AssetWriter')
->disableOriginalConstructor() ->disableOriginalConstructor()
->getMock(); ->getMock();
$dispatcher = $this->getMock('Symfony\\Component\\EventDispatcher\\EventDispatcher'); $evm = $this->getMock('Doctrine\\Common\\EventManager');
$event = new Event(null, 'assetic.write'); $eventArgs = new WriteEventArgs();
$dispatcher->expects($this->once()) $evm->expects($this->once())
->method('notify') ->method('dispatchEvent')
->with($event); ->with(Events::onAsseticWrite, $eventArgs);
$writer->expects($this->once()) $writer->expects($this->once())
->method('writeManagerAssets') ->method('writeManagerAssets')
->with($am); ->with($am);
$warmer = new AssetWriterCacheWarmer($am, $writer, $dispatcher); $warmer = new AssetWriterCacheWarmer($am, $writer, $evm);
$warmer->warmUp('/path/to/cache'); $warmer->warmUp('/path/to/cache');
} }
} }

View File

@ -12,17 +12,29 @@
namespace Symfony\Bundle\FrameworkBundle; namespace Symfony\Bundle\FrameworkBundle;
use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventInterface;
use Doctrine\Common\EventManager; use Doctrine\Common\EventManager;
use Doctrine\Common\EventArgs;
/** /**
* This EventDispatcher automatically gets the kernel listeners injected * Lazily loads listeners and subscribers from the dependency injection
* container
* *
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
* @author Bernhard Schussek <bernhard.schussek@symfony.com>
*/ */
class ContainerAwareEventManager extends EventManager class ContainerAwareEventManager extends EventManager
{ {
protected $container; /**
* The container from where services are loaded
* @var ContainerInterface
*/
private $container;
/**
* The service IDs of the event listeners and subscribers
* @var array
*/
private $listenerIds;
/** /**
* Constructor. * Constructor.
@ -34,53 +46,60 @@ class ContainerAwareEventManager extends EventManager
$this->container = $container; $this->container = $container;
} }
public function registerKernelListeners(array $listeners)
{
$this->listeners = $listeners;
}
/** /**
* {@inheritdoc} * Adds a service as event listener
*
* @param string|array $events One or more events for which the listener
* is added
* @param string $serviceId The ID of the listener service
* @param integer $priority The higher this value, the earlier an event
* listener will be triggered in the chain.
* Defaults to 0.
*/ */
public function notify(EventInterface $event) public function addEventListenerService($events, $serviceId, $priority = 0)
{ {
foreach ($this->getListeners($event->getName()) as $listener) { if (!is_string($serviceId)) {
if (is_array($listener) && is_string($listener[0])) { throw new \InvalidArgumentException('Expected a string argument');
$listener[0] = $this->container->get($listener[0]); }
}
call_user_func($listener, $event); foreach ((array)$events as $event) {
// Prevent duplicate entries
$this->listenerIds[$event][$serviceId] = $priority;
} }
} }
/** /**
* {@inheritdoc} * Adds a service as event subscriber
*
* @param string $serviceId The ID of the subscriber service
* @param integer $priority The higher this value, the earlier an event
* listener will be triggered in the chain.
* Defaults to 0.
*/ */
public function notifyUntil(EventInterface $event) public function addEventSuscriberService($serviceId, $priority = 0)
{ {
foreach ($this->getListeners($event->getName()) as $listener) { if (!is_string($serviceId)) {
if (is_array($listener) && is_string($listener[0])) { throw new \InvalidArgumentException('Expected a string argument');
$listener[0] = $this->container->get($listener[0]);
}
$ret = call_user_func($listener, $event);
if ($event->isProcessed()) {
return $ret;
}
} }
// TODO get class name, call static method getSubscribedEvents()
// and pass to addEventListenerService
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*
* Lazily loads listeners for this event from the dependency injection
* container.
*/ */
public function filter(EventInterface $event, $value) public function dispatchEvent($eventName, EventArgs $eventArgs = null)
{ {
foreach ($this->getListeners($event->getName()) as $listener) { if (isset($this->listenerIds[$eventName])) {
if (is_array($listener) && is_string($listener[0])) { foreach ($this->listenerIds[$eventName] as $serviceId => $priority) {
$listener[0] = $this->container->get($listener[0]); $this->addEventListener($eventName, $this->container->get($serviceId), $priority);
} }
$value = call_user_func($listener, $event, $value);
} }
return $value; parent::dispatchEvent($eventName, $eventArgs);
} }
} }

View File

@ -11,18 +11,18 @@
namespace Symfony\Bundle\FrameworkBundle\Debug; namespace Symfony\Bundle\FrameworkBundle\Debug;
use Doctrine\Common\EventManager; use Symfony\Bundle\FrameworkBundle\ContainerAwareEventManager;
use Symfony\Component\EventDispatcher\EventInterface;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Debug\TraceableEventManagerInterface; use Symfony\Component\HttpKernel\Debug\TraceableEventManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\Common\EventArgs;
/** /**
* EventDispatcher extends the original EventDispatcher class to add some debugging tools. * Extends the ContainerAwareEventManager to add some debugging tools.
* *
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
*/ */
class TraceableEventManager extends EventManager implements TraceableEventManagerInterface class TraceableEventManager extends ContainerAwareEventManager implements TraceableEventManagerInterface
{ {
protected $logger; protected $logger;
protected $called; protected $called;
@ -41,6 +41,14 @@ class TraceableEventManager extends EventManager implements TraceableEventManage
$this->called = array(); $this->called = array();
} }
/**
* {@inheritDoc}
*/
public function dispatchEvent($eventName, EventArgs $eventArgs = null)
{
parent::dispatchEvent($eventName, $eventArgs);
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@ -57,52 +65,6 @@ class TraceableEventManager extends EventManager implements TraceableEventManage
} }
} }
/**
* {@inheritDoc}
*/
public function notifyUntil(EventInterface $event)
{
foreach ($this->getListeners($event->getName()) as $i => $listener) {
if (is_array($listener) && is_string($listener[0])) {
$listener[0] = $this->container->get($listener[0]);
}
$this->addCall($event, $listener, 'notifyUntil');
$ret = call_user_func($listener, $event);
if ($event->isProcessed()) {
if (null !== $this->logger) {
$this->logger->debug(sprintf('Listener "%s" processed the event "%s"', $this->listenerToString($listener), $event->getName()));
$listeners = $this->getListeners($event->getName());
while (++$i < count($listeners)) {
$this->logger->debug(sprintf('Listener "%s" was not called for event "%s"', $this->listenerToString($listeners[$i]), $event->getName()));
}
}
return $ret;
}
}
}
/**
* {@inheritDoc}
*/
public function filter(EventInterface $event, $value)
{
foreach ($this->getListeners($event->getName()) as $listener) {
if (is_array($listener) && is_string($listener[0])) {
$listener[0] = $this->container->get($listener[0]);
}
$this->addCall($event, $listener, 'filter');
$value = call_user_func($listener, $event, $value);
}
return $value;
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@ -163,7 +125,6 @@ class TraceableEventManager extends EventManager implements TraceableEventManage
$this->called[$event->getName().'.'.$listener] = array( $this->called[$event->getName().'.'.$listener] = array(
'event' => $event->getName(), 'event' => $event->getName(),
'caller' => null !== $event->getSubject() ? get_class($event->getSubject()) : null,
'listener' => $listener, 'listener' => $listener,
); );
} }

View File

@ -19,35 +19,25 @@ class RegisterKernelListenersPass implements CompilerPassInterface
{ {
public function process(ContainerBuilder $container) public function process(ContainerBuilder $container)
{ {
if (!$container->hasDefinition('event_dispatcher')) { if (!$container->hasDefinition('event_manager')) {
return; return;
} }
$listeners = array(); $listeners = array();
$definition = $container->getDefinition('event_manager');
foreach ($container->findTaggedServiceIds('kernel.listener') as $id => $events) { foreach ($container->findTaggedServiceIds('kernel.listener') as $id => $events) {
foreach ($events as $event) { foreach ($events as $event) {
$priority = isset($event['priority']) ? $event['priority'] : 0; $priority = isset($event['priority']) ? $event['priority'] : 0;
var_dump($id);
if (!isset($event['event'])) { if (!isset($event['event'])) {
throw new \InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "kernel.listener" tags.', $id)); $definition->addMethodCall('addEventSubscriberService', array($id, $priority));
} else {
$definition->addMethodCall('addEventListenerService', array($event['event'], $id, $priority));
} }
if (!isset($event['method'])) {
throw new \InvalidArgumentException(sprintf('Service "%s" must define the "method" attribute on "kernel.listener" tags.', $id));
}
if (!isset($listeners[$event['event']][$priority])) {
if (!isset($listeners[$event['event']])) {
$listeners[$event['event']] = array();
}
$listeners[$event['event']][$priority] = array();
}
$listeners[$event['event']][$priority][] = array($id, $event['method']);
} }
} }
$container
->getDefinition('event_dispatcher')
->addMethodCall('registerKernelListeners', array($listeners))
;
} }
} }

View File

@ -51,8 +51,8 @@ class FrameworkExtension extends Extension
if ($container->getParameter('kernel.debug')) { if ($container->getParameter('kernel.debug')) {
$loader->load('debug.xml'); $loader->load('debug.xml');
$container->setDefinition('event_dispatcher', $container->findDefinition('debug.event_dispatcher')); $container->setDefinition('event_manager', $container->findDefinition('debug.event_manager'));
$container->setAlias('debug.event_dispatcher', 'event_dispatcher'); $container->setAlias('debug.event_manager', 'event_manager');
} }
$processor = new Processor(); $processor = new Processor();
@ -140,10 +140,13 @@ class FrameworkExtension extends Extension
'Symfony\\Component\\HttpKernel\\ResponseListener', 'Symfony\\Component\\HttpKernel\\ResponseListener',
'Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver', 'Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver',
'Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface', 'Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface',
'Symfony\\Component\\HttpKernel\\Event\\RequestEventArgs', 'Symfony\\Component\\HttpKernel\\Event\\KernelEventArgs',
'Symfony\\Component\\HttpKernel\\Event\\ControllerEventArgs', 'Symfony\\Component\\HttpKernel\\Event\\FilterControllerEventArgs',
'Symfony\\Component\\HttpKernel\\Event\\ViewEventArgs', 'Symfony\\Component\\HttpKernel\\Event\\FilterResponseEventArgs',
'Symfony\\Component\\HttpKernel\\Event\\ExceptionEventArgs', 'Symfony\\Component\\HttpKernel\\Event\\GetResponseEventArgs',
'Symfony\\Component\\HttpKernel\\Event\\GetResponseForControllerResultEventArgs',
'Symfony\\Component\\HttpKernel\\Event\\GetResponseForExceptionEventArgs',
'Symfony\\Component\\HttpKernel\\Events',
'Symfony\\Bundle\\FrameworkBundle\\RequestListener', 'Symfony\\Bundle\\FrameworkBundle\\RequestListener',
'Symfony\\Bundle\\FrameworkBundle\\Controller\\ControllerNameParser', 'Symfony\\Bundle\\FrameworkBundle\\Controller\\ControllerNameParser',

View File

@ -14,7 +14,7 @@ namespace Symfony\Bundle\FrameworkBundle\HttpFoundation;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
/** /**
* SessionListener. * SessionListener.
@ -29,12 +29,12 @@ class SessionListener
* Checks if session was initialized and saves if current request is master * Checks if session was initialized and saves if current request is master
* Runs on 'filterCoreResponse' in test environment * Runs on 'filterCoreResponse' in test environment
* *
* @param RequestEventArgs $eventArgs * @param FilterResponseEventArgs $eventArgs
*/ */
public function filterCoreResponse(RequestEventArgs $eventArgs) public function filterCoreResponse(FilterResponseEventArgs $eventArgs)
{ {
if ($request = $event->getRequest()) { if ($request = $eventArgs->getRequest()) {
if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) { if (HttpKernelInterface::MASTER_REQUEST === $eventArgs->getRequestType()) {
if ($session = $request->getSession()) { if ($session = $request->getSession()) {
$session->save(); $session->save();
} }

View File

@ -16,13 +16,14 @@ use Doctrine\Common\EventManager;
*/ */
class HttpKernel extends BaseHttpKernel class HttpKernel extends BaseHttpKernel
{ {
protected $container; private $container;
protected $esiSupport; private $esiSupport;
public function __construct(ContainerInterface $container, ControllerResolverInterface $controllerResolver) public function __construct(EventManager $evm, ContainerInterface $container, ControllerResolverInterface $controllerResolver)
{ {
parent::__construct($evm, $controllerResolver);
$this->container = $container; $this->container = $container;
$this->resolver = $controllerResolver;
} }
public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)

View File

@ -13,7 +13,7 @@ namespace Symfony\Bundle\FrameworkBundle\Profiler;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
use Symfony\Component\HttpFoundation\RequestMatcherInterface; use Symfony\Component\HttpFoundation\RequestMatcherInterface;
use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface;
@ -62,7 +62,7 @@ class ProfilerListener
* *
* @param EventInterface $eventArgs An EventInterface instance * @param EventInterface $eventArgs An EventInterface instance
*/ */
public function filterCoreResponse(RequestEventArgs $eventArgs) public function filterCoreResponse(FilterResponseEventArgs $eventArgs)
{ {
if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) { if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) {
return; return;

View File

@ -13,7 +13,7 @@ namespace Symfony\Bundle\FrameworkBundle;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface;
@ -36,7 +36,7 @@ class RequestListener
$this->logger = $logger; $this->logger = $logger;
} }
public function onCoreRequest(RequestEventArgs $eventArgs) public function onCoreRequest(GetResponseEventArgs $eventArgs)
{ {
$request = $eventArgs->getRequest(); $request = $eventArgs->getRequest();
$master = HttpKernelInterface::MASTER_REQUEST === $eventArgs->getRequestType(); $master = HttpKernelInterface::MASTER_REQUEST === $eventArgs->getRequestType();

View File

@ -25,9 +25,9 @@
</service> </service>
<service id="http_kernel" class="%http_kernel.class%"> <service id="http_kernel" class="%http_kernel.class%">
<argument type="service" id="event_manager" />
<argument type="service" id="service_container" /> <argument type="service" id="service_container" />
<argument type="service" id="controller_resolver" /> <argument type="service" id="controller_resolver" />
<call method="setEventManager"><argument type="service" id="event_manager" /></call>
</service> </service>
<service id="cache_warmer" class="%cache_warmer.class%"> <service id="cache_warmer" class="%cache_warmer.class%">

View File

@ -12,10 +12,10 @@
namespace Symfony\Bundle\FrameworkBundle\Tests\HttpFoundation; namespace Symfony\Bundle\FrameworkBundle\Tests\HttpFoundation;
use Symfony\Bundle\FrameworkBundle\HttpFoundation\SessionListener; use Symfony\Bundle\FrameworkBundle\HttpFoundation\SessionListener;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
/** /**
* SessionListenerTest. * SessionListenerTest.
@ -53,10 +53,12 @@ class SessionListenerTest extends \PHPUnit_Framework_TestCase
{ {
$request->setSession($this->session); $request->setSession($this->session);
$response = new Response(); $response = new Response();
$kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
$eventArgs = new FilterResponseEventArgs($kernel, $request, $type, $response);
$this->assertSame($response, $this->listener->filter(new Event( $this->listener->filterCoreResponse($eventArgs);
$this, 'filterCoreResponse', array('request' => $request, 'request_type' => $type)
), $response)); $this->assertSame($response, $eventArgs->getResponse());
} }
private function sessionMustNotBeSaved() private function sessionMustNotBeSaved()

View File

@ -5,9 +5,9 @@ namespace Symfony\Bundle\FrameworkBundle\Tests;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Bundle\FrameworkBundle\HttpKernel; use Symfony\Bundle\FrameworkBundle\HttpKernel;
use Doctrine\Common\EventManager;
class HttpKernelTest extends \PHPUnit_Framework_TestCase class HttpKernelTest extends \PHPUnit_Framework_TestCase
{ {
@ -36,10 +36,9 @@ class HttpKernelTest extends \PHPUnit_Framework_TestCase
->with($this->equalTo('request'), $this->equalTo($request), $this->equalTo('request')) ->with($this->equalTo('request'), $this->equalTo($request), $this->equalTo('request'))
; ;
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$resolver = $this->getMock('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface'); $resolver = $this->getMock('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface');
$kernel = new HttpKernel($container, $resolver); $kernel = new HttpKernel($evm, $container, $resolver);
$kernel->setEventDispatcher($dispatcher);
$controller = function() use($expected) $controller = function() use($expected)
{ {
@ -85,10 +84,9 @@ class HttpKernelTest extends \PHPUnit_Framework_TestCase
->with($this->equalTo('request'), $this->equalTo($request), $this->equalTo('request')) ->with($this->equalTo('request'), $this->equalTo($request), $this->equalTo('request'))
; ;
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$resolver = $this->getMock('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface'); $resolver = $this->getMock('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface');
$kernel = new HttpKernel($container, $resolver); $kernel = new HttpKernel($evm, $container, $resolver);
$kernel->setEventDispatcher($dispatcher);
$controller = function() use ($expected) $controller = function() use ($expected)
{ {

View File

@ -15,7 +15,7 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\HttpKernel; use Symfony\Bundle\FrameworkBundle\HttpKernel;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
use Symfony\Bundle\TwigBundle\TwigEngine; use Symfony\Bundle\TwigBundle\TwigEngine;
/** /**
@ -41,7 +41,7 @@ class WebDebugToolbarListener
$this->interceptRedirects = $interceptRedirects; $this->interceptRedirects = $interceptRedirects;
} }
public function filterCoreResponse(RequestEventArgs $eventArgs) public function filterCoreResponse(FilterResponseEventArgs $eventArgs)
{ {
if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) { if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) {
return; return;

View File

@ -13,7 +13,7 @@ namespace Symfony\Component\HttpKernel\Debug;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface; use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\HttpKernel\Event\ExceptionEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEventArgs;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Exception\FlattenException; use Symfony\Component\HttpKernel\Exception\FlattenException;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@ -34,7 +34,7 @@ class ExceptionListener
$this->logger = $logger; $this->logger = $logger;
} }
public function onCoreException(ExceptionEventArgs $eventArgs) public function onCoreException(GetResponseForExceptionEventArgs $eventArgs)
{ {
static $handling; static $handling;
@ -44,8 +44,8 @@ class ExceptionListener
$handling = true; $handling = true;
$exception = $eventArgs->get('exception'); $exception = $eventArgs->getException();
$request = $eventArgs->get('request'); $request = $eventArgs->getRequest();
if (null !== $this->logger) { if (null !== $this->logger) {
$this->logger->err(sprintf('%s: %s (uncaught exception)', get_class($exception), $exception->getMessage())); $this->logger->err(sprintf('%s: %s (uncaught exception)', get_class($exception), $exception->getMessage()));
@ -66,7 +66,7 @@ class ExceptionListener
$request = $request->duplicate(null, null, $attributes); $request = $request->duplicate(null, null, $attributes);
try { try {
$response = $eventArgs->getSubject()->handle($request, HttpKernelInterface::SUB_REQUEST, true); $response = $eventArgs->getKernel()->handle($request, HttpKernelInterface::SUB_REQUEST, true);
} catch (\Exception $e) { } catch (\Exception $e) {
$message = sprintf('Exception thrown when handling an exception (%s: %s)', get_class($e), $e->getMessage()); $message = sprintf('Exception thrown when handling an exception (%s: %s)', get_class($e), $e->getMessage());
if (null !== $this->logger) { if (null !== $this->logger) {
@ -77,12 +77,11 @@ class ExceptionListener
// set handling to false otherwise it wont be able to handle further more // set handling to false otherwise it wont be able to handle further more
$handling = false; $handling = false;
// re-throw the exception as this is a catch-all // re-throw the exception as this is a catch-all
throw $exception; throw $exception;
} }
$eventArgs->setHandled(true);
$eventArgs->setResponse($response); $eventArgs->setResponse($response);
$handling = false; $handling = false;

View File

@ -11,23 +11,18 @@
namespace Symfony\Component\HttpKernel\Event; namespace Symfony\Component\HttpKernel\Event;
use Symfony\Component\HttpKernel\KernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
class ControllerEventArgs extends RequestEventArgs class FilterControllerEventArgs extends KernelEventArgs
{ {
private $controller; private $controller;
public function __construct(KernelInterface $kernel, $controller, Request $request, $requestType) public function __construct(HttpKernelInterface $kernel, $controller, Request $request, $requestType)
{ {
// controller must be a callable
if (!is_callable($controller)) {
throw new \LogicException(sprintf('The controller must be a callable (%s given).', $this->varToString($controller)));
}
parent::__construct($kernel, $request, $requestType); parent::__construct($kernel, $request, $requestType);
$this->controller = $controller; $this->setController($controller);
} }
public function getController() public function getController()

View File

@ -0,0 +1,38 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\HttpKernel\Event;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class FilterResponseEventArgs extends KernelEventArgs
{
private $response;
public function __construct(HttpKernelInterface $kernel, Request $request, $requestType, Response $response)
{
parent::__construct($kernel, $request, $requestType);
$this->setResponse($response);
}
public function getResponse()
{
return $this->response;
}
public function setResponse(Response $response)
{
$this->response = $response;
}
}

View File

@ -0,0 +1,38 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\HttpKernel\Event;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class GetResponseEventArgs extends KernelEventArgs
{
private $response;
public function getResponse()
{
return $this->response;
}
public function setResponse(Response $response)
{
$this->response = $response;
$this->stopPropagation();
}
public function hasResponse()
{
return null !== $this->response;
}
}

View File

@ -11,14 +11,14 @@
namespace Symfony\Component\HttpKernel\Event; namespace Symfony\Component\HttpKernel\Event;
use Symfony\Component\HttpKernel\KernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
class ViewEventArgs extends RequestEventArgs class GetResponseForControllerResultEventArgs extends GetResponseEventArgs
{ {
private $controllerResult; private $controllerResult;
public function __construct(KernelInterface $kernel, $controllerResult, Request $request, $requestType) public function __construct(HttpKernelInterface $kernel, Request $request, $requestType, $controllerResult)
{ {
parent::__construct($kernel, $request, $requestType); parent::__construct($kernel, $request, $requestType);

View File

@ -11,20 +11,18 @@
namespace Symfony\Component\HttpKernel\Event; namespace Symfony\Component\HttpKernel\Event;
use Symfony\Component\HttpKernel\KernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
class ExceptionEventArgs extends RequestEventArgs class GetResponseForExceptionEventArgs extends GetResponseEventArgs
{ {
private $exception; private $exception;
private $handled = false; public function __construct(HttpKernelInterface $kernel, Request $request, $requestType, \Exception $e)
public function __construct(KernelInterface $kernel, \Exception $e, Request $request, $requestType)
{ {
parent::__construct($kernel, $request, $requestType); parent::__construct($kernel, $request, $requestType);
$this->exception = $e; $this->setException($e);
} }
public function getException() public function getException()
@ -36,16 +34,4 @@ class ExceptionEventArgs extends RequestEventArgs
{ {
$this->exception = $exception; $this->exception = $exception;
} }
public function setHandled($handled)
{
$this->handled = $handled;
$this->stopPropagation();
}
public function isHandled()
{
return $this->handled;
}
} }

View File

@ -11,12 +11,11 @@
namespace Symfony\Component\HttpKernel\Event; namespace Symfony\Component\HttpKernel\Event;
use Symfony\Component\HttpKernel\KernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\Common\EventArgs; use Doctrine\Common\EventArgs;
class RequestEventArgs extends EventArgs class KernelEventArgs extends EventArgs
{ {
private $kernel; private $kernel;
@ -24,14 +23,11 @@ class RequestEventArgs extends EventArgs
private $requestType; private $requestType;
private $response; public function __construct(HttpKernelInterface $kernel, Request $request, $requestType)
public function __construct(KernelInterface $kernel, Request $request, $requestType, Response $response = null)
{ {
$this->kernel = $kernel; $this->kernel = $kernel;
$this->request = $request; $this->request = $request;
$this->requestType = $requestType; $this->requestType = $requestType;
$this->response = $response;
} }
public function getKernel() public function getKernel()
@ -48,21 +44,4 @@ class RequestEventArgs extends EventArgs
{ {
return $this->requestType; return $this->requestType;
} }
public function getResponse()
{
return $this->response;
}
public function setResponse(Response $response)
{
$this->response = $response;
$this->stopPropagation();
}
public function hasResponse()
{
return null !== $this->response;
}
} }

View File

@ -21,7 +21,7 @@ final class Events
const onCoreView = 'onCoreView'; const onCoreView = 'onCoreView';
const filterCoreRespone = 'filterCoreResponse'; const filterCoreResponse = 'filterCoreResponse';
const onCoreSecurity = 'onCoreSecurity'; const onCoreSecurity = 'onCoreSecurity';
} }

View File

@ -13,7 +13,7 @@ namespace Symfony\Component\HttpKernel\HttpCache;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
/** /**
* EsiListener adds a Surrogate-Control HTTP header when the Response needs to be parsed for ESI. * EsiListener adds a Surrogate-Control HTTP header when the Response needs to be parsed for ESI.
@ -38,9 +38,9 @@ class EsiListener
/** /**
* Filters the Response. * Filters the Response.
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param FilterResponseEventArgs $eventArgs A FilterResponseEventArgs instance
*/ */
public function filterCoreResponse(RequestEventArgs $eventArgs) public function filterCoreResponse(FilterResponseEventArgs $eventArgs)
{ {
if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType() || null === $this->esi) { if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType() || null === $this->esi) {
return; return;

View File

@ -13,10 +13,11 @@ namespace Symfony\Component\HttpKernel;
use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface; use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Event\ControllerEventArgs; use Symfony\Component\HttpKernel\Event\FilterControllerEventArgs;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
use Symfony\Component\HttpKernel\Event\ExceptionEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpKernel\Event\ViewEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEventArgs;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEventArgs;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Doctrine\Common\EventManager; use Doctrine\Common\EventManager;
@ -28,8 +29,8 @@ use Doctrine\Common\EventManager;
*/ */
class HttpKernel implements HttpKernelInterface class HttpKernel implements HttpKernelInterface
{ {
protected $evm; private $evm;
protected $resolver; private $resolver;
/** /**
* Constructor * Constructor
@ -56,10 +57,10 @@ class HttpKernel implements HttpKernelInterface
} }
// exception // exception
$eventArgs = new ExceptionEventArgs($this, $e, $request, $type); $eventArgs = new GetResponseForExceptionEventArgs($this, $request, $type, $e);
$this->evm->dispatchEvent(Events::onCoreException, $eventArgs); $this->evm->dispatchEvent(Events::onCoreException, $eventArgs);
if (!$eventArgs->isHandled()) { if (!$eventArgs->hasResponse()) {
throw $e; throw $e;
} }
@ -85,7 +86,7 @@ class HttpKernel implements HttpKernelInterface
protected function handleRaw(Request $request, $type = self::MASTER_REQUEST) protected function handleRaw(Request $request, $type = self::MASTER_REQUEST)
{ {
// request // request
$eventArgs = new RequestEventArgs($this, $request, $type); $eventArgs = new GetResponseEventArgs($this, $request, $type);
$this->evm->dispatchEvent(Events::onCoreRequest, $eventArgs); $this->evm->dispatchEvent(Events::onCoreRequest, $eventArgs);
if ($eventArgs->hasResponse()) { if ($eventArgs->hasResponse()) {
@ -97,7 +98,7 @@ class HttpKernel implements HttpKernelInterface
throw new NotFoundHttpException(sprintf('Unable to find the controller for path "%s". Maybe you forgot to add the matching route in your routing configuration?', $request->getPathInfo())); throw new NotFoundHttpException(sprintf('Unable to find the controller for path "%s". Maybe you forgot to add the matching route in your routing configuration?', $request->getPathInfo()));
} }
$eventArgs = new ControllerEventArgs($this, $controller, $request, $type); $eventArgs = new FilterControllerEventArgs($this, $controller, $request, $type);
$this->evm->dispatchEvent(Events::filterCoreController, $eventArgs); $this->evm->dispatchEvent(Events::filterCoreController, $eventArgs);
$controller = $eventArgs->getController(); $controller = $eventArgs->getController();
@ -109,8 +110,8 @@ class HttpKernel implements HttpKernelInterface
// view // view
if (!$response instanceof Response) { if (!$response instanceof Response) {
$eventArgs = new ViewEventArgs($this, $response, $request, $type); $eventArgs = new GetResponseForControllerResultEventArgs($this, $request, $type, $response);
$this->dispatchEvent(Events::onCoreView, $eventArgs); $this->evm->dispatchEvent(Events::onCoreView, $eventArgs);
if ($eventArgs->hasResponse()) { if ($eventArgs->hasResponse()) {
$response = $eventArgs->getResponse(); $response = $eventArgs->getResponse();
@ -137,11 +138,11 @@ class HttpKernel implements HttpKernelInterface
*/ */
protected function filterResponse(Response $response, Request $request, $type) protected function filterResponse(Response $response, Request $request, $type)
{ {
$eventArgs = new RequestEventArgs($this, $request, $type, $response); $eventArgs = new FilterResponseEventArgs($this, $request, $type, $response);
$this->evm->dispatchEvent(Events::filterCoreResponse, $eventArgs); $this->evm->dispatchEvent(Events::filterCoreResponse, $eventArgs);
return $event->getResponse(); return $eventArgs->getResponse();
} }
protected function varToString($var) protected function varToString($var)

View File

@ -11,7 +11,7 @@
namespace Symfony\Component\HttpKernel; namespace Symfony\Component\HttpKernel;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
/** /**
@ -31,11 +31,11 @@ class ResponseListener
/** /**
* Filters the Response. * Filters the Response.
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param FilterResponseEventArgs $eventArgs A FilterResponseEventArgs instance
*/ */
public function filterCoreResponse(RequestEventArgs $eventArgs) public function filterCoreResponse(FilterResponseEventArgs $eventArgs)
{ {
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) { if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) {
return; return;
} }
@ -49,7 +49,7 @@ class ResponseListener
return; return;
} }
$request = $event->getRequest(); $request = $eventArgs->getRequest();
$format = $request->getRequestFormat(); $format = $request->getRequestFormat();
if ((null !== $format) && $mimeType = $request->getMimeType($format)) { if ((null !== $format) && $mimeType = $request->getMimeType($format)) {
$response->headers->set('Content-Type', $mimeType); $response->headers->set('Content-Type', $mimeType);

View File

@ -2,7 +2,7 @@
namespace Symfony\Component\Security\Http\Authentication; namespace Symfony\Component\Security\Http\Authentication;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@ -22,12 +22,12 @@ interface AuthenticationFailureHandlerInterface
* called by authentication listeners inheriting from * called by authentication listeners inheriting from
* AbstractAuthenticationListener. * AbstractAuthenticationListener.
* *
* @param RequestEventArgs $eventArgs the "onCoreSecurity" event, this event always * @param GetResponseEventArgs $eventArgs the "onCoreSecurity" event, this event always
* has the kernel as target * has the kernel as target
* @param Request $request * @param Request $request
* @param AuthenticationException $exception * @param AuthenticationException $exception
* *
* @return Response the response to return * @return Response the response to return
*/ */
function onAuthenticationFailure(RequestEventArgs $eventArgs, Request $request, AuthenticationException $exception); function onAuthenticationFailure(GetResponseEventArgs $eventArgs, Request $request, AuthenticationException $exception);
} }

View File

@ -2,7 +2,7 @@
namespace Symfony\Component\Security\Http\Authentication; namespace Symfony\Component\Security\Http\Authentication;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@ -22,12 +22,12 @@ interface AuthenticationSuccessHandlerInterface
* is called by authentication listeners inheriting from * is called by authentication listeners inheriting from
* AbstractAuthenticationListener. * AbstractAuthenticationListener.
* *
* @param RequestEventArgs $eventArgs the "onCoreSecurity" event, this event always * @param GetResponseEventArgs $eventArgs the "onCoreSecurity" event, this event always
* has the kernel as target * has the kernel as target
* @param Request $request * @param Request $request
* @param TokenInterface $token * @param TokenInterface $token
* *
* @return Response the response to return * @return Response the response to return
*/ */
function onAuthenticationSuccess(RequestEventArgs $eventArgs, Request $request, TokenInterface $token); function onAuthenticationSuccess(GetResponseEventArgs $eventArgs, Request $request, TokenInterface $token);
} }

View File

@ -11,7 +11,7 @@
namespace Symfony\Component\Security\Http\EntryPoint; namespace Symfony\Component\Security\Http\EntryPoint;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@ -26,9 +26,9 @@ interface AuthenticationEntryPointInterface
/** /**
* Starts the authentication scheme. * Starts the authentication scheme.
* *
* @param RequestEventArgs $eventArgs The "onCoreSecurity" event * @param GetResponseEventArgs $eventArgs The "onCoreSecurity" event
* @param object $request The request that resulted in an AuthenticationException * @param object $request The request that resulted in an AuthenticationException
* @param AuthenticationException $authException The exception that started the authentication process * @param AuthenticationException $authException The exception that started the authentication process
*/ */
function start(RequestEventArgs $eventArgs, Request $request, AuthenticationException $authException = null); function start(GetResponseEventArgs $eventArgs, Request $request, AuthenticationException $authException = null);
} }

View File

@ -15,7 +15,7 @@ use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface; use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
/** /**
* BasicAuthenticationEntryPoint starts an HTTP Basic authentication. * BasicAuthenticationEntryPoint starts an HTTP Basic authentication.
@ -31,7 +31,7 @@ class BasicAuthenticationEntryPoint implements AuthenticationEntryPointInterface
$this->realmName = $realmName; $this->realmName = $realmName;
} }
public function start(RequestEventArgs $event, Request $request, AuthenticationException $authException = null) public function start(GetResponseEventArgs $event, Request $request, AuthenticationException $authException = null)
{ {
$response = new Response(); $response = new Response();
$response->headers->set('WWW-Authenticate', sprintf('Basic realm="%s"', $this->realmName)); $response->headers->set('WWW-Authenticate', sprintf('Basic realm="%s"', $this->realmName));

View File

@ -17,7 +17,7 @@ use Symfony\Component\Security\Core\Exception\NonceExpiredException;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
/** /**
* DigestAuthenticationEntryPoint starts an HTTP Digest authentication. * DigestAuthenticationEntryPoint starts an HTTP Digest authentication.
@ -39,7 +39,7 @@ class DigestAuthenticationEntryPoint implements AuthenticationEntryPointInterfac
$this->logger = $logger; $this->logger = $logger;
} }
public function start(RequestEventArgs $eventArgs, Request $request, AuthenticationException $authException = null) public function start(GetResponseEventArgs $eventArgs, Request $request, AuthenticationException $authException = null)
{ {
$expiryTime = microtime(true) + $this->nonceValiditySeconds * 1000; $expiryTime = microtime(true) + $this->nonceValiditySeconds * 1000;
$signatureValue = md5($expiryTime.':'.$this->key); $signatureValue = md5($expiryTime.':'.$this->key);

View File

@ -17,7 +17,7 @@ use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface; use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
/** /**
* FormAuthenticationEntryPoint starts an authentication via a login form. * FormAuthenticationEntryPoint starts an authentication via a login form.
@ -44,7 +44,7 @@ class FormAuthenticationEntryPoint implements AuthenticationEntryPointInterface
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
public function start(RequestEventArgs $eventArgs, Request $request, AuthenticationException $authException = null) public function start(GetResponseEventArgs $eventArgs, Request $request, AuthenticationException $authException = null)
{ {
if ($this->useForward) { if ($this->useForward) {
return $event->getKernel()->handle(Request::create($this->loginPath), HttpKernelInterface::SUB_REQUEST); return $event->getKernel()->handle(Request::create($this->loginPath), HttpKernelInterface::SUB_REQUEST);

View File

@ -16,7 +16,7 @@ use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
/** /**
* RetryAuthenticationEntryPoint redirects URL based on the configured scheme. * RetryAuthenticationEntryPoint redirects URL based on the configured scheme.
@ -36,7 +36,7 @@ class RetryAuthenticationEntryPoint implements AuthenticationEntryPointInterface
$this->httpsPort = $httpsPort; $this->httpsPort = $httpsPort;
} }
public function start(RequestEventArgs $eventArgs, Request $request, AuthenticationException $authException = null) public function start(GetResponseEventArgs $eventArgs, Request $request, AuthenticationException $authException = null)
{ {
$scheme = $request->isSecure() ? 'http' : 'https'; $scheme = $request->isSecure() ? 'http' : 'https';
if ('http' === $scheme && 80 != $this->httpPort) { if ('http' === $scheme && 80 != $this->httpPort) {

View File

@ -13,7 +13,7 @@ namespace Symfony\Component\Security\Http;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Events; use Symfony\Component\HttpKernel\Events;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Doctrine\Common\EventManager; use Doctrine\Common\EventManager;
@ -48,9 +48,9 @@ class Firewall
/** /**
* Handles security. * Handles security.
* *
* @param RequestEventArgs $eventArgs An RequestEventArgs instance * @param GetResponseEventArgs $eventArgs An GetResponseEventArgs instance
*/ */
public function onCoreRequest(RequestEventArgs $eventArgs) public function onCoreRequest(GetResponseEventArgs $eventArgs)
{ {
if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) { if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) {
return; return;
@ -83,7 +83,7 @@ class Firewall
} }
// initiate the listener chain // initiate the listener chain
$securityEventArgs = new RequestEventArgs($eventArgs->getKernel(), $request, $eventArgs->getRequestType()); $securityEventArgs = new GetResponseEventArgs($eventArgs->getKernel(), $request, $eventArgs->getRequestType());
$this->evm->dispatchEvent($securityEventArgs); $this->evm->dispatchEvent($securityEventArgs);
if ($securityEventArgs->hasResponse()) { if ($securityEventArgs->hasResponse()) {

View File

@ -21,7 +21,7 @@ use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Events as KernelEvents; use Symfony\Component\HttpKernel\Events as KernelEvents;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RedirectResponse;
@ -125,7 +125,7 @@ abstract class AbstractAuthenticationListener implements ListenerInterface
* *
* @param Event $event An Event instance * @param Event $event An Event instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
$request = $eventArgs->getRequest(); $request = $eventArgs->getRequest();
@ -170,7 +170,7 @@ abstract class AbstractAuthenticationListener implements ListenerInterface
return $this->options['check_path'] === $request->getPathInfo(); return $this->options['check_path'] === $request->getPathInfo();
} }
protected function onFailure(RequestEventArgs $eventArgs, Request $request, AuthenticationException $failed) protected function onFailure(GetResponseEventArgs $eventArgs, Request $request, AuthenticationException $failed)
{ {
if (null !== $this->logger) { if (null !== $this->logger) {
$this->logger->debug(sprintf('Authentication request failed: %s', $failed->getMessage())); $this->logger->debug(sprintf('Authentication request failed: %s', $failed->getMessage()));
@ -206,7 +206,7 @@ abstract class AbstractAuthenticationListener implements ListenerInterface
return new RedirectResponse(0 !== strpos($this->options['failure_path'], 'http') ? $request->getUriForPath($this->options['failure_path']) : $this->options['failure_path'], 302); return new RedirectResponse(0 !== strpos($this->options['failure_path'], 'http') ? $request->getUriForPath($this->options['failure_path']) : $this->options['failure_path'], 302);
} }
protected function onSuccess(RequestEventArgs $eventArgs, Request $request, TokenInterface $token) protected function onSuccess(GetResponseEventArgs $eventArgs, Request $request, TokenInterface $token)
{ {
if (null !== $this->logger) { if (null !== $this->logger) {
$this->logger->debug('User has been authenticated successfully'); $this->logger->debug('User has been authenticated successfully');

View File

@ -17,7 +17,7 @@ use Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken;
use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Http\Event\InteractiveLoginEventArgs; use Symfony\Component\Security\Http\Event\InteractiveLoginEventArgs;
use Symfony\Component\Security\Http\Events; use Symfony\Component\Security\Http\Events;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpKernel\Events as KernelEvents; use Symfony\Component\HttpKernel\Events as KernelEvents;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@ -70,7 +70,7 @@ abstract class AbstractPreAuthenticatedListener implements ListenerInterface
* *
* @param EventInterface $event An EventInterface instance * @param EventInterface $event An EventInterface instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
$request = $eventArgs->getRequest(); $request = $eventArgs->getRequest();

View File

@ -16,7 +16,7 @@ use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface
use Symfony\Component\Security\Http\AccessMap; use Symfony\Component\Security\Http\AccessMap;
use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpKernel\Events; use Symfony\Component\HttpKernel\Events;
use Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException; use Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException;
use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\Security\Core\Exception\AccessDeniedException;
@ -64,9 +64,9 @@ class AccessListener implements ListenerInterface
/** /**
* Handles access authorization. * Handles access authorization.
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param GetResponseEventArgs $eventArgs A GetResponseEventArgs instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
if (null === $token = $this->context->getToken()) { if (null === $token = $this->context->getToken()) {
throw new AuthenticationCredentialsNotFoundException('A Token was not found in the SecurityContext.'); throw new AuthenticationCredentialsNotFoundException('A Token was not found in the SecurityContext.');

View File

@ -13,7 +13,7 @@ namespace Symfony\Component\Security\Http\Firewall;
use Symfony\Component\Security\Core\SecurityContextInterface; use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpKernel\Events; use Symfony\Component\HttpKernel\Events;
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken; use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
use Doctrine\Common\EventManager; use Doctrine\Common\EventManager;
@ -58,9 +58,9 @@ class AnonymousAuthenticationListener implements ListenerInterface
/** /**
* Handles anonymous authentication. * Handles anonymous authentication.
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param GetResponseEventArgs $eventArgs A GetResponseEventArgs instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
if (null !== $this->context->getToken()) { if (null !== $this->context->getToken()) {
return; return;

View File

@ -15,7 +15,7 @@ use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface;
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface; use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpKernel\Events; use Symfony\Component\HttpKernel\Events;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AuthenticationException;
@ -69,11 +69,11 @@ class BasicAuthenticationListener implements ListenerInterface
/** /**
* Handles basic authentication. * Handles basic authentication.
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param GetResponseEventArgs $eventArgs A GetResponseEventArgs instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
$request = $event->get('request'); $request = $eventArgs->getRequest();
if (false === $username = $request->server->get('PHP_AUTH_USER', false)) { if (false === $username = $request->server->get('PHP_AUTH_USER', false)) {
return; return;

View File

@ -14,7 +14,7 @@ namespace Symfony\Component\Security\Http\Firewall;
use Symfony\Component\Security\Http\AccessMap; use Symfony\Component\Security\Http\AccessMap;
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface; use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpKernel\Events; use Symfony\Component\HttpKernel\Events;
use Doctrine\Common\EventManager; use Doctrine\Common\EventManager;
@ -57,9 +57,9 @@ class ChannelListener implements ListenerInterface
/** /**
* Handles channel management. * Handles channel management.
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param GetResponseEventArgs $eventArgs A GetResponseEventArgs instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
$request = $eventArgs->getRequest(); $request = $eventArgs->getRequest();

View File

@ -14,7 +14,8 @@ namespace Symfony\Component\Security\Http\Firewall;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken; use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException; use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
@ -73,9 +74,9 @@ class ContextListener implements ListenerInterface
/** /**
* Reads the SecurityContext from the session. * Reads the SecurityContext from the session.
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param GetResponseEventArgs $eventArgs A GetResponseEventArgs instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
$request = $eventArgs->getRequest(); $request = $eventArgs->getRequest();
@ -103,7 +104,7 @@ class ContextListener implements ListenerInterface
* *
* @param EventInterface $event An EventInterface instance * @param EventInterface $event An EventInterface instance
*/ */
public function filterCoreResponse(RequestEventArgs $eventArgs) public function filterCoreResponse(FilterResponseEventArgs $eventArgs)
{ {
if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) { if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) {
return; return;

View File

@ -15,7 +15,7 @@ use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface; use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Http\EntryPoint\DigestAuthenticationEntryPoint; use Symfony\Component\Security\Http\EntryPoint\DigestAuthenticationEntryPoint;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpKernel\Events; use Symfony\Component\HttpKernel\Events;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Core\Exception\BadCredentialsException; use Symfony\Component\Security\Core\Exception\BadCredentialsException;
@ -72,9 +72,9 @@ class DigestAuthenticationListener implements ListenerInterface
/** /**
* Handles digest authentication. * Handles digest authentication.
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param GetResponseEventArgs $eventArgs A GetResponseEventArgs instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
$request = $eventArgs->getRequest(); $request = $eventArgs->getRequest();

View File

@ -142,7 +142,6 @@ class ExceptionListener implements ListenerInterface
return; return;
} }
$eventArgs->setHandled(true);
$eventArgs->setResponse($response); $eventArgs->setResponse($response);
} }

View File

@ -17,7 +17,7 @@ use Symfony\Component\Security\Http\Logout\LogoutHandlerInterface;
use Symfony\Component\Security\Core\SecurityContextInterface; use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Kernel\Event\RequestEventArgs; use Symfony\Component\Kernel\Event\GetResponseEventArgs;
use Symfony\Component\Kernel\Events; use Symfony\Component\Kernel\Events;
use Doctrine\Common\EventManager; use Doctrine\Common\EventManager;
@ -81,9 +81,9 @@ class LogoutListener implements ListenerInterface
/** /**
* Performs the logout if requested * Performs the logout if requested
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param GetResponseEventArgs $eventArgs A GetResponseEventArgs instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
$request = $eventArgs->getRequest(); $request = $eventArgs->getRequest();

View File

@ -4,7 +4,8 @@ namespace Symfony\Component\Security\Http\Firewall;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
use Symfony\Component\HttpKernel\Events as KernelEvents; use Symfony\Component\HttpKernel\Events as KernelEvents;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
@ -82,9 +83,9 @@ class RememberMeListener implements ListenerInterface
/** /**
* Handles remember-me cookie based authentication. * Handles remember-me cookie based authentication.
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param GetResponseEventArgs $eventArgs A GetResponseEventArgs instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
$this->lastState = null; $this->lastState = null;
@ -143,7 +144,7 @@ class RememberMeListener implements ListenerInterface
* Update cookies * Update cookies
* @param Event $event * @param Event $event
*/ */
public function filterCoreResponse(RequestEventArgs $eventArgs) public function filterCoreResponse(FilterResponseEventArgs $eventArgs)
{ {
if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) { if (HttpKernelInterface::MASTER_REQUEST !== $eventArgs->getRequestType()) {
return; return;

View File

@ -16,7 +16,7 @@ use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\User\AccountCheckerInterface; use Symfony\Component\Security\Core\User\AccountCheckerInterface;
use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface; use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
use Symfony\Component\HttpKernel\Log\LoggerInterface; use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
use Symfony\Component\HttpKernel\Events; use Symfony\Component\HttpKernel\Events;
use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@ -89,9 +89,9 @@ class SwitchUserListener implements ListenerInterface
/** /**
* Handles digest authentication. * Handles digest authentication.
* *
* @param RequestEventArgs $eventArgs A RequestEventArgs instance * @param GetResponseEventArgs $eventArgs A GetResponseEventArgs instance
*/ */
public function onCoreSecurity(RequestEventArgs $eventArgs) public function onCoreSecurity(GetResponseEventArgs $eventArgs)
{ {
$request = $eventArgs->getRequest(); $request = $eventArgs->getRequest();

View File

@ -3,7 +3,7 @@
namespace Symfony\Component\Security\Http\Logout; namespace Symfony\Component\Security\Http\Logout;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\RequestEventArgs; use Symfony\Component\HttpKernel\Event\GetResponseEventArgs;
/** /**
* LogoutSuccesshandlerInterface. * LogoutSuccesshandlerInterface.
@ -21,9 +21,9 @@ interface LogoutSuccessHandlerInterface
/** /**
* Creates a Response object to send upon a successful logout. * Creates a Response object to send upon a successful logout.
* *
* @param RequestEventArgs $eventArgs * @param GetResponseEventArgs $eventArgs
* @param Request $request * @param Request $request
* @return Response never null * @return Response never null
*/ */
function onLogoutSuccess(RequestEventArgs $eventArgs, Request $request); function onLogoutSuccess(GetResponseEventArgs $eventArgs, Request $request);
} }

View File

@ -15,8 +15,6 @@ use Symfony\Component\HttpKernel\Client;
use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;
require_once __DIR__.'/TestHttpKernel.php'; require_once __DIR__.'/TestHttpKernel.php';

View File

@ -14,8 +14,8 @@ namespace Symfony\Tests\Component\HttpKernel\DataCollector;
use Symfony\Component\HttpKernel\DataCollector\EventDataCollector; use Symfony\Component\HttpKernel\DataCollector\EventDataCollector;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Debug\EventDispatcherTraceableInterface; use Symfony\Component\HttpKernel\Debug\TraceableEventManagerInterface;
use Symfony\Component\EventDispatcher\EventDispatcher; use Doctrine\Common\EventManager;
class EventDataCollectorTest extends \PHPUnit_Framework_TestCase class EventDataCollectorTest extends \PHPUnit_Framework_TestCase
@ -23,18 +23,18 @@ class EventDataCollectorTest extends \PHPUnit_Framework_TestCase
public function testCollect() public function testCollect()
{ {
$c = new EventDataCollector(); $c = new EventDataCollector();
$c->setEventDispatcher(new TestEventDispatcher()); $c->setEventManager(new TestEventManager());
$c->collect(new Request(), new Response()); $c->collect(new Request(), new Response());
$this->assertSame('events',$c->getName()); $this->assertSame('events',$c->getName());
$this->assertSame(array('foo'),$c->getCalledListeners()); $this->assertSame(array('foo'),$c->getCalledListeners());
$this->assertSame(array('bar'),$c->getNotCalledListeners()); $this->assertSame(array('bar'),$c->getNotCalledListeners());
} }
} }
class TestEventDispatcher extends EventDispatcher implements EventDispatcherTraceableInterface class TestEventManager extends EventManager implements TraceableEventManagerInterface
{ {
function getCalledListeners() function getCalledListeners()
{ {

View File

@ -11,11 +11,13 @@
namespace Symfony\Tests\Component\HttpKernel\Debug; namespace Symfony\Tests\Component\HttpKernel\Debug;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Debug\ExceptionListener; use Symfony\Component\HttpKernel\Debug\ExceptionListener;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Debug\ErrorException; use Symfony\Component\HttpKernel\Debug\ErrorException;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEventArgs;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Tests\Component\HttpKernel\Logger; use Symfony\Tests\Component\HttpKernel\Logger;
/** /**
@ -29,72 +31,74 @@ class ExceptionListenerTest extends \PHPUnit_Framework_TestCase
{ {
$logger = new TestLogger(); $logger = new TestLogger();
$l = new ExceptionListener('foo', $logger); $l = new ExceptionListener('foo', $logger);
$_logger = new \ReflectionProperty(get_class($l),'logger'); $_logger = new \ReflectionProperty(get_class($l), 'logger');
$_logger->setAccessible(true); $_logger->setAccessible(true);
$_controller = new \ReflectionProperty(get_class($l),'controller'); $_controller = new \ReflectionProperty(get_class($l), 'controller');
$_controller->setAccessible(true); $_controller->setAccessible(true);
$this->assertSame($logger,$_logger->getValue($l)); $this->assertSame($logger, $_logger->getValue($l));
$this->assertSame('foo',$_controller->getValue($l)); $this->assertSame('foo', $_controller->getValue($l));
} }
/** /**
* @dataProvider provider * @dataProvider provider
*/ */
public function testHandleWithoutLogger($event,$event2) public function testHandleWithoutLogger($eventArgs, $eventArgs2)
{ {
//store the current error_log, and set the new one to dev/null //store the current error_log, and set the new one to dev/null
$error_log = ini_get('error_log'); $error_log = ini_get('error_log');
ini_set('error_log','/dev/null'); ini_set('error_log', '/dev/null');
$l = new ExceptionListener('foo');
$this->assertEquals('foo', $l->handle($event)); $l = new ExceptionListener('foo');
$l->onCoreException($eventArgs);
try{
$response = $l->handle($event2); $this->assertEquals(new Response('foo'), $eventArgs->getResponse());
}catch(\Exception $e){
$this->assertSame('foo',$e->getMessage()); try {
$l->onCoreException($eventArgs2);
} catch(\Exception $e) {
$this->assertSame('foo', $e->getMessage());
} }
//restore the old error_log //restore the old error_log
ini_set('error_log',$error_log); ini_set('error_log', $error_log);
} }
/** /**
* @dataProvider provider * @dataProvider provider
*/ */
public function testHandleWithLogger($event, $event2) public function testHandleWithLogger($eventArgs, $eventArgs2)
{ {
$logger = new TestLogger(); $logger = new TestLogger();
$l = new ExceptionListener('foo',$logger); $l = new ExceptionListener('foo', $logger);
$l->onCoreException($eventArgs);
$this->assertSame('foo', $l->handle($event));
$this->assertEquals(new Response('foo'), $eventArgs->getResponse());
try{
$response = $l->handle($event2); try {
}catch(\Exception $e){ $l->onCoreException($eventArgs2);
$this->assertSame('foo',$e->getMessage()); } catch(\Exception $e) {
$this->assertSame('foo', $e->getMessage());
} }
$this->assertEquals(3,$logger->countErrors()); $this->assertEquals(3, $logger->countErrors());
$this->assertEquals(3,count($logger->getLogs('err'))); $this->assertEquals(3, count($logger->getLogs('err')));
} }
public function provider() public function provider()
{ {
$args = array('exception'=>new ErrorException('foo'),'request'=>new Request()); $request = new Request();
$exception = new ErrorException('foo');
$event = new Event(new Subject(),'bar',$args); $eventArgs = new GetResponseForExceptionEventArgs(new TestKernel(), $request, 'foo', $exception);
$event2 = new Event(new SubjectException(),'bar',$args); $eventArgs2 = new GetResponseForExceptionEventArgs(new TestKernelThatThrowsException(), $request, 'foo', $exception);
return array( return array(
array($event,$event2) array($eventArgs, $eventArgs2)
); );
} }
} }
class TestLogger extends Logger implements DebugLoggerInterface class TestLogger extends Logger implements DebugLoggerInterface
@ -103,25 +107,25 @@ class TestLogger extends Logger implements DebugLoggerInterface
{ {
return count($this->logs['err']); return count($this->logs['err']);
} }
public function getDebugLogger() public function getDebugLogger()
{ {
return new static(); return new static();
} }
} }
class Subject class TestKernel implements HttpKernelInterface
{ {
public function handle() public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true)
{ {
return 'foo'; return new Response('foo');
} }
} }
class SubjectException class TestKernelThatThrowsException implements HttpKernelInterface
{ {
public function handle() public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true)
{ {
throw new \Exception('bar'); throw new \Exception('bar');
} }

View File

@ -13,46 +13,54 @@ namespace Symfony\Tests\Component\HttpKernel\HttpCache;
use Symfony\Component\HttpKernel\HttpCache\Esi; use Symfony\Component\HttpKernel\HttpCache\Esi;
use Symfony\Component\HttpKernel\HttpCache\EsiListener; use Symfony\Component\HttpKernel\HttpCache\EsiListener;
use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
use Symfony\Component\EventDispatcher\Event; use Symfony\Component\HttpKernel\Events;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\Common\EventManager;
class EsiListenerTest extends \PHPUnit_Framework_TestCase class EsiListenerTest extends \PHPUnit_Framework_TestCase
{ {
public function testFilterDoesNothingForSubRequests() public function testFilterDoesNothingForSubRequests()
{ {
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
$response = new Response('foo <esi:include src="" />');
$listener = new EsiListener(new Esi()); $listener = new EsiListener(new Esi());
$dispatcher->connect('core.response', array($listener, 'filter'));
$event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::SUB_REQUEST)); $evm->addEventListener(Events::filterCoreResponse, $listener);
$dispatcher->filter($event, $response = new Response('foo <esi:include src="" />')); $eventArgs = new FilterResponseEventArgs($kernel, new Request(), HttpKernelInterface::SUB_REQUEST, $response);
$evm->dispatchEvent(Events::filterCoreResponse, $eventArgs);
$this->assertEquals('', $response->headers->get('Surrogate-Control')); $this->assertEquals('', $eventArgs->getResponse()->headers->get('Surrogate-Control'));
} }
public function testFilterWhenThereIsSomeEsiIncludes() public function testFilterWhenThereIsSomeEsiIncludes()
{ {
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
$response = new Response('foo <esi:include src="" />');
$listener = new EsiListener(new Esi()); $listener = new EsiListener(new Esi());
$dispatcher->connect('core.response', array($listener, 'filter'));
$event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::MASTER_REQUEST)); $evm->addEventListener(Events::filterCoreResponse, $listener);
$dispatcher->filter($event, $response = new Response('foo <esi:include src="" />')); $eventArgs = new FilterResponseEventArgs($kernel, new Request(), HttpKernelInterface::MASTER_REQUEST, $response);
$evm->dispatchEvent(Events::filterCoreResponse, $eventArgs);
$this->assertEquals('content="ESI/1.0"', $response->headers->get('Surrogate-Control')); $this->assertEquals('content="ESI/1.0"', $eventArgs->getResponse()->headers->get('Surrogate-Control'));
} }
public function testFilterWhenThereIsNoEsiIncludes() public function testFilterWhenThereIsNoEsiIncludes()
{ {
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
$response = new Response('foo');
$listener = new EsiListener(new Esi()); $listener = new EsiListener(new Esi());
$dispatcher->connect('core.response', array($listener, 'filter'));
$event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::MASTER_REQUEST)); $evm->addEventListener(Events::filterCoreResponse, $listener);
$dispatcher->filter($event, $response = new Response('foo')); $eventArgs = new FilterResponseEventArgs($kernel, new Request(), HttpKernelInterface::MASTER_REQUEST, $response);
$evm->dispatchEvent(Events::filterCoreResponse, $eventArgs);
$this->assertEquals('', $response->headers->get('Surrogate-Control')); $this->assertEquals('', $eventArgs->getResponse()->headers->get('Surrogate-Control'));
} }
} }

View File

@ -15,8 +15,8 @@ use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface; use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
use Doctrine\Common\EventManager;
class TestHttpKernel extends HttpKernel implements ControllerResolverInterface class TestHttpKernel extends HttpKernel implements ControllerResolverInterface
{ {
@ -36,7 +36,7 @@ class TestHttpKernel extends HttpKernel implements ControllerResolverInterface
$this->called = false; $this->called = false;
$this->catch = false; $this->catch = false;
parent::__construct(new EventDispatcher(), $this); parent::__construct(new EventManager(), $this);
} }
public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = false) public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = false)

View File

@ -15,8 +15,8 @@ use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface; use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
use Doctrine\Common\EventManager;
class TestMultipleHttpKernel extends HttpKernel implements ControllerResolverInterface class TestMultipleHttpKernel extends HttpKernel implements ControllerResolverInterface
{ {
@ -39,7 +39,7 @@ class TestMultipleHttpKernel extends HttpKernel implements ControllerResolverInt
$this->headers[] = $response['headers']; $this->headers[] = $response['headers'];
} }
parent::__construct(new EventDispatcher(), $this); parent::__construct(new EventManager(), $this);
} }
public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = false) public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = false)

View File

@ -13,9 +13,10 @@ namespace Symfony\Tests\Component\HttpKernel;
use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Events;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\EventDispatcher\EventDispatcher; use Doctrine\Common\EventManager;
class HttpKernelTest extends \PHPUnit_Framework_TestCase class HttpKernelTest extends \PHPUnit_Framework_TestCase
{ {
@ -24,7 +25,7 @@ class HttpKernelTest extends \PHPUnit_Framework_TestCase
*/ */
public function testHandleWhenControllerThrowsAnExceptionAndRawIsTrue() public function testHandleWhenControllerThrowsAnExceptionAndRawIsTrue()
{ {
$kernel = new HttpKernel(new EventDispatcher(), $this->getResolver(function () { throw new \RuntimeException(); })); $kernel = new HttpKernel(new EventManager(), $this->getResolver(function () { throw new \RuntimeException(); }));
$kernel->handle(new Request(), HttpKernelInterface::MASTER_REQUEST, true); $kernel->handle(new Request(), HttpKernelInterface::MASTER_REQUEST, true);
} }
@ -34,37 +35,33 @@ class HttpKernelTest extends \PHPUnit_Framework_TestCase
*/ */
public function testHandleWhenControllerThrowsAnExceptionAndRawIsFalseAndNoListenerIsRegistered() public function testHandleWhenControllerThrowsAnExceptionAndRawIsFalseAndNoListenerIsRegistered()
{ {
$kernel = new HttpKernel(new EventDispatcher(), $this->getResolver(function () { throw new \RuntimeException(); })); $kernel = new HttpKernel(new EventManager(), $this->getResolver(function () { throw new \RuntimeException(); }));
$kernel->handle(new Request(), HttpKernelInterface::MASTER_REQUEST, false); $kernel->handle(new Request(), HttpKernelInterface::MASTER_REQUEST, false);
} }
public function testHandleWhenControllerThrowsAnExceptionAndRawIsFalse() public function testHandleWhenControllerThrowsAnExceptionAndRawIsFalse()
{ {
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$dispatcher->connect('core.exception', function ($event) $evm->addEventListener(Events::onCoreException, function ($eventArgs)
{ {
$event->setProcessed(); $eventArgs->setResponse(new Response($eventArgs->getException()->getMessage()));
return new Response($event->get('exception')->getMessage());
}); });
$kernel = new HttpKernel($dispatcher, $this->getResolver(function () { throw new \RuntimeException('foo'); })); $kernel = new HttpKernel($evm, $this->getResolver(function () { throw new \RuntimeException('foo'); }));
$this->assertEquals('foo', $kernel->handle(new Request())->getContent()); $this->assertEquals('foo', $kernel->handle(new Request())->getContent());
} }
public function testHandleWhenAListenerReturnsAResponse() public function testHandleWhenAListenerReturnsAResponse()
{ {
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$dispatcher->connect('core.request', function ($event) $evm->addEventListener(Events::onCoreRequest, function ($eventArgs)
{ {
$event->setProcessed(); $eventArgs->setResponse(new Response('hello'));
return new Response('hello');
}); });
$kernel = new HttpKernel($dispatcher, $this->getResolver()); $kernel = new HttpKernel($evm, $this->getResolver());
$this->assertEquals('hello', $kernel->handle(new Request())->getContent()); $this->assertEquals('hello', $kernel->handle(new Request())->getContent());
} }
@ -74,8 +71,8 @@ class HttpKernelTest extends \PHPUnit_Framework_TestCase
*/ */
public function testHandleWhenNoControllerIsFound() public function testHandleWhenNoControllerIsFound()
{ {
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$kernel = new HttpKernel($dispatcher, $this->getResolver(false)); $kernel = new HttpKernel($evm, $this->getResolver(false));
$kernel->handle(new Request()); $kernel->handle(new Request());
} }
@ -85,77 +82,43 @@ class HttpKernelTest extends \PHPUnit_Framework_TestCase
*/ */
public function testHandleWhenNoControllerIsNotACallable() public function testHandleWhenNoControllerIsNotACallable()
{ {
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$kernel = new HttpKernel($dispatcher, $this->getResolver('foobar')); $kernel = new HttpKernel($evm, $this->getResolver('foobar'));
$kernel->handle(new Request()); $kernel->handle(new Request());
} }
/** /**
* @expectedException RuntimeException * @expectedException LogicException
*/ */
public function testHandleWhenControllerDoesNotReturnAResponse() public function testHandleWhenControllerDoesNotReturnAResponse()
{ {
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$kernel = new HttpKernel($dispatcher, $this->getResolver(function () { return 'foo'; })); $kernel = new HttpKernel($evm, $this->getResolver(function () { return 'foo'; }));
$kernel->handle(new Request()); $kernel->handle(new Request());
} }
public function testHandleWhenControllerDoesNotReturnAResponseButAViewIsRegistered() public function testHandleWhenControllerDoesNotReturnAResponseButAViewIsRegistered()
{ {
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$dispatcher->connect('core.view', function ($event) $evm->addEventListener(Events::onCoreView, function ($eventArgs)
{ {
$event->setProcessed(); $eventArgs->setResponse(new Response($eventArgs->getControllerResult()));
return new Response($event->get('controller_value'));
}); });
$kernel = new HttpKernel($dispatcher, $this->getResolver(function () { return 'foo'; })); $kernel = new HttpKernel($evm, $this->getResolver(function () { return 'foo'; }));
$this->assertEquals('foo', $kernel->handle(new Request())->getContent()); $this->assertEquals('foo', $kernel->handle(new Request())->getContent());
} }
/**
* @expectedException RuntimeException
*/
public function testHandleWhenAViewDoesNotReturnAResponse()
{
$dispatcher = new EventDispatcher();
$dispatcher->connect('core.view', function ($event)
{
$event->setProcessed();
return $event->get('controller_value');
});
$kernel = new HttpKernel($dispatcher, $this->getResolver(function () { return 'foo'; }));
$kernel->handle(new Request());
}
/**
* @expectedException RuntimeException
*/
public function testHandleWhenAResponseListenerDoesNotReturnAResponse()
{
$dispatcher = new EventDispatcher();
$dispatcher->connect('core.response', function ($event, $response)
{
return 'foo';
});
$kernel = new HttpKernel($dispatcher, $this->getResolver());
$kernel->handle(new Request());
}
public function testHandleWithAResponseListener() public function testHandleWithAResponseListener()
{ {
$dispatcher = new EventDispatcher(); $evm = new EventManager();
$dispatcher->connect('core.response', function ($event, $response) $evm->addEventListener(Events::filterCoreResponse, function ($eventArgs)
{ {
return new Response('foo'); $eventArgs->setResponse(new Response('foo'));
}); });
$kernel = new HttpKernel($dispatcher, $this->getResolver()); $kernel = new HttpKernel($evm, $this->getResolver());
$this->assertEquals('foo', $kernel->handle(new Request())->getContent()); $this->assertEquals('foo', $kernel->handle(new Request())->getContent());
} }

View File

@ -12,56 +12,68 @@
namespace Symfony\Tests\Component\HttpKernel; namespace Symfony\Tests\Component\HttpKernel;
use Symfony\Component\HttpKernel\ResponseListener; use Symfony\Component\HttpKernel\ResponseListener;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEventArgs;
use Symfony\Component\HttpKernel\Events;
use Doctrine\Common\EventManager;
class ResponseListenerTest extends \PHPUnit_Framework_TestCase class ResponseListenerTest extends \PHPUnit_Framework_TestCase
{ {
private $evm;
private $kernel;
protected function setUp()
{
$this->evm = new EventManager();
$listener = new ResponseListener('UTF-8');
$this->evm->addEventListener(Events::filterCoreResponse, $listener);
$this->kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
}
public function testFilterDoesNothingForSubRequests() public function testFilterDoesNothingForSubRequests()
{ {
$event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::SUB_REQUEST)); $response = new Response('foo');
$this->getDispatcher()->filter($event, $response = new Response('foo'));
$this->assertEquals('', $response->headers->get('content-type')); $eventArgs = new FilterResponseEventArgs($this->kernel, new Request(), HttpKernelInterface::SUB_REQUEST, $response);
$this->evm->dispatchEvent(Events::filterCoreResponse, $eventArgs);
$this->assertEquals('', $eventArgs->getResponse()->headers->get('content-type'));
} }
public function testFilterDoesNothingIfContentTypeIsSet() public function testFilterDoesNothingIfContentTypeIsSet()
{ {
$event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::MASTER_REQUEST));
$response = new Response('foo'); $response = new Response('foo');
$response->headers->set('Content-Type', 'text/plain'); $response->headers->set('Content-Type', 'text/plain');
$this->getDispatcher()->filter($event, $response);
$this->assertEquals('text/plain', $response->headers->get('content-type')); $eventArgs = new FilterResponseEventArgs($this->kernel, new Request(), HttpKernelInterface::MASTER_REQUEST, $response);
$this->evm->dispatchEvent(Events::filterCoreResponse, $eventArgs);
$this->assertEquals('text/plain', $eventArgs->getResponse()->headers->get('content-type'));
} }
public function testFilterDoesNothingIfRequestFormatIsNotDefined() public function testFilterDoesNothingIfRequestFormatIsNotDefined()
{ {
$event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::MASTER_REQUEST, 'request' => Request::create('/'))); $response = new Response('foo');
$this->getDispatcher()->filter($event, $response = new Response('foo'));
$this->assertEquals('', $response->headers->get('content-type')); $eventArgs = new FilterResponseEventArgs($this->kernel, Request::create('/'), HttpKernelInterface::MASTER_REQUEST, $response);
$this->evm->dispatchEvent(Events::filterCoreResponse, $eventArgs);
$this->assertEquals('', $eventArgs->getResponse()->headers->get('content-type'));
} }
public function testFilterSetContentType() public function testFilterSetContentType()
{ {
$response = new Response('foo');
$request = Request::create('/'); $request = Request::create('/');
$request->setRequestFormat('json'); $request->setRequestFormat('json');
$event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::MASTER_REQUEST, 'request' => $request));
$this->getDispatcher()->filter($event, $response = new Response('foo'));
$this->assertEquals('application/json', $response->headers->get('content-type')); $eventArgs = new FilterResponseEventArgs($this->kernel, $request, HttpKernelInterface::MASTER_REQUEST, $response);
} $this->evm->dispatchEvent(Events::filterCoreResponse, $eventArgs);
protected function getDispatcher() $this->assertEquals('application/json', $eventArgs->getResponse()->headers->get('content-type'));
{
$dispatcher = new EventDispatcher();
$listener = new ResponseListener('UTF-8');
$dispatcher->connect('core.response', array($listener, 'filter'));
return $dispatcher;
} }
} }

View File

@ -14,14 +14,14 @@ namespace Symfony\Tests\Component\HttpKernel;
use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface; use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
use Doctrine\Common\EventManager;
class TestHttpKernel extends HttpKernel implements ControllerResolverInterface class TestHttpKernel extends HttpKernel implements ControllerResolverInterface
{ {
public function __construct() public function __construct()
{ {
parent::__construct(new EventDispatcher(), $this); parent::__construct(new EventManager(), $this);
} }
public function getController(Request $request) public function getController(Request $request)

View File

@ -3,6 +3,7 @@
namespace Symfony\Tests\Component\Security\Http\Firewall; namespace Symfony\Tests\Component\Security\Http\Firewall;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Events;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Exception\CookieTheftException; use Symfony\Component\Security\Core\Exception\CookieTheftException;
use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AuthenticationException;
@ -15,22 +16,17 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
{ {
list($listener,,,,) = $this->getListener(); list($listener,,,,) = $this->getListener();
$dispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcher'); $evm = $this->getMock('Doctrine\Common\EventManager');
$dispatcher $evm
->expects($this->at(0)) ->expects($this->once())
->method('connect') ->method('addEventListener')
->with($this->equalTo('core.security')) ->with($this->equalTo(array(Events::onCoreSecurity, Events::filterCoreResponse)))
;
$dispatcher
->expects($this->at(1))
->method('connect')
->with($this->equalTo('core.response'))
; ;
$listener->register($dispatcher); $listener->register($evm);
} }
public function testCheckCookiesDoesNotTryToPopulateNonEmptySecurityContext() public function testOnCoreSecurityDoesNotTryToPopulateNonEmptySecurityContext()
{ {
list($listener, $context, $service,,) = $this->getListener(); list($listener, $context, $service,,) = $this->getListener();
@ -46,11 +42,11 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
; ;
$this->assertNull($this->getLastState($listener)); $this->assertNull($this->getLastState($listener));
$this->assertNull($listener->checkCookies($this->getEvent())); $this->assertNull($listener->onCoreSecurity($this->getGetResponseEvent()));
$this->assertNull($this->getLastState($listener)); $this->assertNull($this->getLastState($listener));
} }
public function testCheckCookiesDoesNothingWhenNoCookieIsSet() public function testOnCoreSecurityDoesNothingWhenNoCookieIsSet()
{ {
list($listener, $context, $service,,) = $this->getListener(); list($listener, $context, $service,,) = $this->getListener();
@ -66,20 +62,19 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
->will($this->returnValue(null)) ->will($this->returnValue(null))
; ;
$event = $this->getEvent(); $event = $this->getGetResponseEvent();
$event $event
->expects($this->once()) ->expects($this->once())
->method('get') ->method('getRequest')
->with('request')
->will($this->returnValue(new Request())) ->will($this->returnValue(new Request()))
; ;
$this->assertNull($this->getLastState($listener)); $this->assertNull($this->getLastState($listener));
$this->assertNull($listener->checkCookies($event)); $this->assertNull($listener->onCoreSecurity($event));
$this->assertNull($this->getLastState($listener)); $this->assertNull($this->getLastState($listener));
} }
public function testCheckCookiesIgnoresAuthenticationExceptionThrownByTheRememberMeServicesImplementation() public function testOnCoreSecurityIgnoresAuthenticationExceptionThrownByTheRememberMeServicesImplementation()
{ {
list($listener, $context, $service,,) = $this->getListener(); list($listener, $context, $service,,) = $this->getListener();
@ -96,20 +91,19 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
->will($this->throwException($exception)) ->will($this->throwException($exception))
; ;
$event = $this->getEvent(); $event = $this->getGetResponseEvent();
$event $event
->expects($this->once()) ->expects($this->once())
->method('get') ->method('getRequest')
->with('request')
->will($this->returnValue(new Request())) ->will($this->returnValue(new Request()))
; ;
$this->assertNull($this->getLastState($listener)); $this->assertNull($this->getLastState($listener));
$this->assertNull($listener->checkCookies($event)); $this->assertNull($listener->onCoreSecurity($event));
$this->assertSame($exception, $this->getLastState($listener)); $this->assertSame($exception, $this->getLastState($listener));
} }
public function testCheckCookiesThrowsCookieTheftExceptionIfThrownByTheRememberMeServicesImplementation() public function testOnCoreSecurityThrowsCookieTheftExceptionIfThrownByTheRememberMeServicesImplementation()
{ {
list($listener, $context, $service,,) = $this->getListener(); list($listener, $context, $service,,) = $this->getListener();
@ -126,16 +120,15 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
->will($this->throwException($exception)) ->will($this->throwException($exception))
; ;
$event = $this->getEvent(); $event = $this->getGetResponseEvent();
$event $event
->expects($this->once()) ->expects($this->once())
->method('get') ->method('getRequest')
->with('request')
->will($this->returnValue(new Request())) ->will($this->returnValue(new Request()))
; ;
try { try {
$listener->checkCookies($event); $listener->onCoreSecurity($event);
} }
catch (CookieTheftException $theft) { catch (CookieTheftException $theft) {
$this->assertSame($theft, $this->getLastState($listener)); $this->assertSame($theft, $this->getLastState($listener));
@ -146,7 +139,7 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
$this->fail('Expected CookieTheftException was not thrown.'); $this->fail('Expected CookieTheftException was not thrown.');
} }
public function testCheckCookiesAuthenticationManagerDoesNotChangeListenerStateWhenTokenIsNotSupported() public function testOnCoreSecurityAuthenticationManagerDoesNotChangeListenerStateWhenTokenIsNotSupported()
{ {
list($listener, $context, $service, $manager,) = $this->getListener(); list($listener, $context, $service, $manager,) = $this->getListener();
@ -162,20 +155,19 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
->will($this->returnValue($this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface'))) ->will($this->returnValue($this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface')))
; ;
$event = $this->getEvent(); $event = $this->getGetResponseEvent();
$event $event
->expects($this->once()) ->expects($this->once())
->method('get') ->method('getRequest')
->with('request')
->will($this->returnValue(new Request())) ->will($this->returnValue(new Request()))
; ;
$this->assertNull($this->getLastState($listener)); $this->assertNull($this->getLastState($listener));
$this->assertNull($listener->checkCookies($event)); $this->assertNull($listener->onCoreSecurity($event));
$this->assertNull($this->getLastState($listener)); $this->assertNull($this->getLastState($listener));
} }
public function testCheckCookiesIgnoresAuthenticationExceptionThrownByAuthenticationManagerImplementation() public function testOnCoreSecurityIgnoresAuthenticationExceptionThrownByAuthenticationManagerImplementation()
{ {
list($listener, $context, $service, $manager,) = $this->getListener(); list($listener, $context, $service, $manager,) = $this->getListener();
@ -198,20 +190,19 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
->will($this->throwException($exception)) ->will($this->throwException($exception))
; ;
$event = $this->getEvent(); $event = $this->getGetResponseEvent();
$event $event
->expects($this->once()) ->expects($this->once())
->method('get') ->method('getRequest')
->with('request')
->will($this->returnValue(new Request())) ->will($this->returnValue(new Request()))
; ;
$this->assertNull($this->getLastState($listener)); $this->assertNull($this->getLastState($listener));
$this->assertNull($listener->checkCookies($event)); $this->assertNull($listener->onCoreSecurity($event));
$this->assertSame($exception, $this->getLastState($listener)); $this->assertSame($exception, $this->getLastState($listener));
} }
public function testCheckCookies() public function testOnCoreSecurity()
{ {
list($listener, $context, $service, $manager,) = $this->getListener(); list($listener, $context, $service, $manager,) = $this->getListener();
@ -240,37 +231,41 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
->will($this->returnValue($token)) ->will($this->returnValue($token))
; ;
$event = $this->getEvent(); $event = $this->getGetResponseEvent();
$event $event
->expects($this->once()) ->expects($this->once())
->method('get') ->method('getRequest')
->with('request')
->will($this->returnValue(new Request())) ->will($this->returnValue(new Request()))
; ;
$this->assertNull($this->getLastState($listener)); $this->assertNull($this->getLastState($listener));
$this->assertNull($listener->checkCookies($event)); $this->assertNull($listener->onCoreSecurity($event));
$this->assertSame($token, $this->getLastState($listener)); $this->assertSame($token, $this->getLastState($listener));
} }
public function testUpdateCookiesIgnoresAnythingButMasterRequests() public function testFilterCoreResponseIgnoresAnythingButMasterRequests()
{ {
list($listener,,,,) = $this->getListener(); list($listener,, $service,,) = $this->getListener();
$event = $this->getEvent(); $token = $this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface');
$this->setLastState($listener, $token);
$event = $this->getFilterResponseEvent();
$event $event
->expects($this->once()) ->expects($this->once())
->method('get') ->method('getRequestType')
->with($this->equalTo('request_type'))
->will($this->returnValue('foo')) ->will($this->returnValue('foo'))
; ;
$response = $this->getMock('Symfony\Component\HttpFoundation\Response'); $service
->expects($this->never())
->method('loginSuccess')
;
$this->assertSame($response, $listener->updateCookies($event, $response)); $listener->filterCoreResponse($event);
} }
public function testUpdateCookiesCallsLoginSuccessOnRememberMeServicesImplementationWhenAuthenticationWasSuccessful() public function testFilterCoreResponseCallsLoginSuccessOnRememberMeServicesImplementationWhenAuthenticationWasSuccessful()
{ {
list($listener,, $service,,) = $this->getListener(); list($listener,, $service,,) = $this->getListener();
@ -280,19 +275,22 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
$token = $this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface'); $token = $this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface');
$this->setLastState($listener, $token); $this->setLastState($listener, $token);
$event = $this->getEvent(); $event = $this->getFilterResponseEvent();
$event $event
->expects($this->at(0)) ->expects($this->any())
->method('get') ->method('getRequestType')
->with('request_type')
->will($this->returnValue(HttpKernelInterface::MASTER_REQUEST)) ->will($this->returnValue(HttpKernelInterface::MASTER_REQUEST))
; ;
$event $event
->expects($this->at(1)) ->expects($this->any())
->method('get') ->method('getRequest')
->with('request')
->will($this->returnValue($request)) ->will($this->returnValue($request))
; ;
$event
->expects($this->any())
->method('getResponse')
->will($this->returnValue($response))
;
$service $service
->expects($this->once()) ->expects($this->once())
@ -301,10 +299,10 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
->will($this->returnValue(null)) ->will($this->returnValue(null))
; ;
$this->assertSame($response, $listener->updateCookies($event, $response)); $listener->filterCoreResponse($event);
} }
public function testUpdateCookiesCallsLoginFailOnRememberMeServicesImplementationWhenAuthenticationWasNotSuccessful() public function testFilterCoreResponseCallsLoginFailOnRememberMeServicesImplementationWhenAuthenticationWasNotSuccessful()
{ {
list($listener,, $service,,) = $this->getListener(); list($listener,, $service,,) = $this->getListener();
@ -314,19 +312,22 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
$exception = new AuthenticationException('foo'); $exception = new AuthenticationException('foo');
$this->setLastState($listener, $exception); $this->setLastState($listener, $exception);
$event = $this->getEvent(); $event = $this->getFilterResponseEvent();
$event $event
->expects($this->at(0)) ->expects($this->any())
->method('get') ->method('getRequestType')
->with('request_type')
->will($this->returnValue(HttpKernelInterface::MASTER_REQUEST)) ->will($this->returnValue(HttpKernelInterface::MASTER_REQUEST))
; ;
$event $event
->expects($this->at(1)) ->expects($this->any())
->method('get') ->method('getRequest')
->with('request')
->will($this->returnValue($request)) ->will($this->returnValue($request))
; ;
$event
->expects($this->any())
->method('getResponse')
->will($this->returnValue($response))
;
$service $service
->expects($this->once()) ->expects($this->once())
@ -335,7 +336,7 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
->will($this->returnValue(null)) ->will($this->returnValue(null))
; ;
$this->assertSame($response, $listener->updateCookies($event, $response)); $listener->filterCoreResponse($event);
} }
protected function setLastState($listener, $state) protected function setLastState($listener, $state)
@ -355,9 +356,14 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
return $p->getValue($listener); return $p->getValue($listener);
} }
protected function getEvent() protected function getGetResponseEvent()
{ {
return $this->getMock('Symfony\Component\EventDispatcher\Event', array(), array(), '', false); return $this->getMock('Symfony\Component\HttpKernel\Event\GetResponseEventArgs', array(), array(), '', false);
}
protected function getFilterResponseEvent()
{
return $this->getMock('Symfony\Component\HttpKernel\Event\FilterResponseEventArgs', array(), array(), '', false);
} }
protected function getListener() protected function getListener()