Skip to content
This repository has been archived by the owner on Feb 24, 2023. It is now read-only.

Commit

Permalink
bug #626 Fixed behaviour on Symfony 3.4 (tarlepp)
Browse files Browse the repository at this point in the history
This PR was squashed before being merged into the 5.4.x-dev branch (closes #626).

Discussion
----------

Fixed behaviour on Symfony 3.4

Not 100% sure if  this is the "proper" way to handle those event class changes properly - but at least now tests are ok with 3.4 and 4.3 - although I don't like to use that generic `KernelEvent` type on those listener classes - but didn't found another solution to fix that.

If there is another solution for that I'm like to hear that - so that I could improve this PR.

Related to #625

Commits
-------

d5c3d4a Fixed behaviour on Symfony 3.4
  • Loading branch information
fabpot committed Jul 3, 2019
2 parents 2d80083 + d5c3d4a commit 646b3f2
Show file tree
Hide file tree
Showing 13 changed files with 92 additions and 49 deletions.
4 changes: 2 additions & 2 deletions EventListener/ControllerListener.php
Expand Up @@ -15,7 +15,7 @@
use Doctrine\Common\Persistence\Proxy;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ConfigurationInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
Expand All @@ -41,7 +41,7 @@ public function __construct(Reader $reader)
* controllers annotations like the template to render or HTTP caching
* configuration.
*/
public function onKernelController(ControllerEvent $event)
public function onKernelController(KernelEvent $event)
{
$controller = $event->getController();

Expand Down
7 changes: 3 additions & 4 deletions EventListener/HttpCacheListener.php
Expand Up @@ -14,8 +14,7 @@
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
Expand All @@ -40,7 +39,7 @@ public function __construct()
/**
* Handles HTTP validation headers.
*/
public function onKernelController(ControllerEvent $event)
public function onKernelController(KernelEvent $event)
{
$request = $event->getRequest();
if (!$configuration = $request->attributes->get('_cache')) {
Expand Down Expand Up @@ -79,7 +78,7 @@ public function onKernelController(ControllerEvent $event)
/**
* Modifies the response to apply HTTP cache headers when needed.
*/
public function onKernelResponse(ResponseEvent $event)
public function onKernelResponse(KernelEvent $event)
{
$request = $event->getRequest();

Expand Down
4 changes: 2 additions & 2 deletions EventListener/IsGrantedListener.php
Expand Up @@ -14,7 +14,7 @@
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Sensio\Bundle\FrameworkExtraBundle\Request\ArgumentNameConverter;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
Expand All @@ -36,7 +36,7 @@ public function __construct(ArgumentNameConverter $argumentNameConverter, Author
$this->authChecker = $authChecker;
}

public function onKernelControllerArguments(ControllerArgumentsEvent $event)
public function onKernelControllerArguments(KernelEvent $event)
{
$request = $event->getRequest();

Expand Down
4 changes: 2 additions & 2 deletions EventListener/ParamConverterListener.php
Expand Up @@ -15,7 +15,7 @@
use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\ParamConverterManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
Expand Down Expand Up @@ -50,7 +50,7 @@ public function __construct(ParamConverterManager $manager, $autoConvert = true)
/**
* Modifies the ParamConverterManager instance.
*/
public function onKernelController(ControllerEvent $event)
public function onKernelController(KernelEvent $event)
{
$controller = $event->getController();
$request = $event->getRequest();
Expand Down
4 changes: 2 additions & 2 deletions EventListener/PsrResponseListener.php
Expand Up @@ -14,7 +14,7 @@
use Psr\Http\Message\ResponseInterface;
use Symfony\Bridge\PsrHttpMessage\HttpFoundationFactoryInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
Expand All @@ -37,7 +37,7 @@ public function __construct(HttpFoundationFactoryInterface $httpFoundationFactor
/**
* Do the conversion if applicable and update the response of the event.
*/
public function onKernelView(ViewEvent $event)
public function onKernelView(KernelEvent $event)
{
$controllerResult = $event->getControllerResult();

Expand Down
20 changes: 14 additions & 6 deletions EventListener/SecurityListener.php
Expand Up @@ -15,7 +15,7 @@
use Sensio\Bundle\FrameworkExtraBundle\Request\ArgumentNameConverter;
use Sensio\Bundle\FrameworkExtraBundle\Security\ExpressionLanguage;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\AuthenticationTrustResolverInterface;
Expand Down Expand Up @@ -50,7 +50,7 @@ public function __construct(ArgumentNameConverter $argumentNameConverter, Expres
$this->logger = $logger;
}

public function onKernelControllerArguments(ControllerArgumentsEvent $event)
public function onKernelControllerArguments(KernelEvent $event)
{
$request = $event->getRequest();
if (!$configurations = $request->attributes->get('_security')) {
Expand Down Expand Up @@ -81,15 +81,23 @@ public function onKernelControllerArguments(ControllerArgumentsEvent $event)
}

// code should be sync with Symfony\Component\Security\Core\Authorization\Voter\ExpressionVoter
private function getVariables(ControllerArgumentsEvent $event)
private function getVariables(KernelEvent $event)
{
$request = $event->getRequest();
$token = $this->tokenStorage->getToken();

if (null !== $this->roleHierarchy) {
$roles = $this->roleHierarchy->getReachableRoleNames($token->getRoleNames());
if (method_exists($this->roleHierarchy, 'getReachableRoleNames')) {
if (null !== $this->roleHierarchy) {
$roles = $this->roleHierarchy->getReachableRoleNames($token->getRoleNames());
} else {
$roles = $token->getRoleNames();
}
} else {
$roles = $token->getRoleNames();
if (null !== $this->roleHierarchy) {
$roles = $this->roleHierarchy->getReachableRoles($token->getRoles());
} else {
$roles = $token->getRoles();
}
}

$variables = [
Expand Down
7 changes: 3 additions & 4 deletions EventListener/TemplateListener.php
Expand Up @@ -17,8 +17,7 @@
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
Expand All @@ -43,7 +42,7 @@ public function __construct(TemplateGuesser $templateGuesser, \Twig_Environment
* Guesses the template name to render and its variables and adds them to
* the request object.
*/
public function onKernelController(ControllerEvent $event)
public function onKernelController(KernelEvent $event)
{
$request = $event->getRequest();
$template = $request->attributes->get('_template');
Expand All @@ -68,7 +67,7 @@ public function onKernelController(ControllerEvent $event)
* Renders the template and initializes a new response object with the
* rendered template content.
*/
public function onKernelView(ViewEvent $event)
public function onKernelView(KernelEvent $event)
{
/* @var Template $template */
$request = $event->getRequest();
Expand Down
5 changes: 4 additions & 1 deletion Tests/EventListener/ControllerListenerTest.php
Expand Up @@ -22,6 +22,7 @@
use Sensio\Bundle\FrameworkExtraBundle\Tests\EventListener\Fixture\FooControllerParamConverterAtClassAndMethod;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;

class ControllerListenerTest extends \PHPUnit\Framework\TestCase
Expand Down Expand Up @@ -131,7 +132,9 @@ private function getFilterControllerEvent($controller, Request $request)
{
$mockKernel = $this->getMockForAbstractClass('Symfony\Component\HttpKernel\Kernel', ['', '']);

return new ControllerEvent($mockKernel, $controller, $request, HttpKernelInterface::MASTER_REQUEST);
$eventClass = class_exists(ControllerEvent::class) ? ControllerEvent::class : FilterControllerEvent::class;

return new $eventClass($mockKernel, $controller, $request, HttpKernelInterface::MASTER_REQUEST);
}

private function getReadedCache()
Expand Down
36 changes: 24 additions & 12 deletions Tests/EventListener/HttpCacheListenerTest.php
Expand Up @@ -16,6 +16,8 @@
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;

Expand Down Expand Up @@ -153,9 +155,10 @@ public function testLastModifiedNotModifiedResponse()
$request = $this->createRequest(new Cache(['lastModified' => 'test.getDate()']));
$request->attributes->set('test', new TestEntity());
$request->headers->add(['If-Modified-Since' => 'Fri, 23 Aug 2013 00:00:00 GMT']);
$eventClass = class_exists(ControllerEvent::class) ? ControllerEvent::class : FilterControllerEvent::class;

$listener = new HttpCacheListener();
$controllerEvent = new ControllerEvent($this->getKernel(), function () {
$controllerEvent = new $eventClass($this->getKernel(), function () {
return new Response(500);
}, $request, null);

Expand All @@ -170,14 +173,16 @@ public function testLastModifiedHeader()
$request = $this->createRequest(new Cache(['lastModified' => 'test.getDate()']));
$request->attributes->set('test', new TestEntity());
$response = new Response();
$eventClass = class_exists(ControllerEvent::class) ? ControllerEvent::class : FilterControllerEvent::class;

$listener = new HttpCacheListener();
$controllerEvent = new ControllerEvent($this->getKernel(), function () {
$controllerEvent = new $eventClass($this->getKernel(), function () {
return new Response();
}, $request, null);
$listener->onKernelController($controllerEvent);
$eventClass = class_exists(ResponseEvent::class) ? ResponseEvent::class : FilterResponseEvent::class;

$responseEvent = new ResponseEvent($this->getKernel(), $request, HttpKernelInterface::MASTER_REQUEST, \call_user_func($controllerEvent->getController()));
$responseEvent = new $eventClass($this->getKernel(), $request, HttpKernelInterface::MASTER_REQUEST, \call_user_func($controllerEvent->getController()));
$listener->onKernelResponse($responseEvent);

$response = $responseEvent->getResponse();
Expand All @@ -192,9 +197,10 @@ public function testEtagNotModifiedResponse()
$request = $this->createRequest(new Cache(['etag' => 'test.getId()']));
$request->attributes->set('test', $entity = new TestEntity());
$request->headers->add(['If-None-Match' => sprintf('"%s"', hash('sha256', $entity->getId()))]);
$eventClass = class_exists(ControllerEvent::class) ? ControllerEvent::class : FilterControllerEvent::class;

$listener = new HttpCacheListener();
$controllerEvent = new ControllerEvent($this->getKernel(), function () {
$controllerEvent = new $eventClass($this->getKernel(), function () {
return new Response(500);
}, $request, null);

Expand All @@ -209,14 +215,17 @@ public function testEtagHeader()
$request = $this->createRequest(new Cache(['ETag' => 'test.getId()']));
$request->attributes->set('test', $entity = new TestEntity());
$response = new Response();
$eventClass = class_exists(ControllerEvent::class) ? ControllerEvent::class : FilterControllerEvent::class;

$listener = new HttpCacheListener();
$controllerEvent = new ControllerEvent($this->getKernel(), function () {
$controllerEvent = new $eventClass($this->getKernel(), function () {
return new Response();
}, $request, null);
$listener->onKernelController($controllerEvent);

$responseEvent = new ResponseEvent($this->getKernel(), $request, HttpKernelInterface::MASTER_REQUEST, \call_user_func($controllerEvent->getController()));
$eventClass = class_exists(ResponseEvent::class) ? ResponseEvent::class : FilterResponseEvent::class;

$responseEvent = new $eventClass($this->getKernel(), $request, HttpKernelInterface::MASTER_REQUEST, \call_user_func($controllerEvent->getController()));
$listener->onKernelResponse($responseEvent);

$response = $responseEvent->getResponse();
Expand Down Expand Up @@ -245,8 +254,10 @@ public function testConfigurationDoesNotOverrideAlreadySetResponseHeaders()
$response->setMaxAge(30);
$response->setVary(['foobaz']);

$eventClass = class_exists(ResponseEvent::class) ? ResponseEvent::class : FilterResponseEvent::class;

$listener = new HttpCacheListener();
$responseEvent = new ResponseEvent($this->getKernel(), $request, HttpKernelInterface::MASTER_REQUEST, $response);
$responseEvent = new $eventClass($this->getKernel(), $request, HttpKernelInterface::MASTER_REQUEST, $response);
$listener->onKernelResponse($responseEvent);

$this->assertEquals('"54321"', $response->getEtag());
Expand All @@ -266,21 +277,22 @@ private function createRequest(Cache $cache = null)

private function createEventMock(Request $request, Response $response)
{
$eventClass = class_exists(ResponseEvent::class) ? ResponseEvent::class : FilterResponseEvent::class;

$event = $this
->getMockBuilder('Symfony\Component\HttpKernel\Event\ResponseEvent')
->getMockBuilder($eventClass)
->disableOriginalConstructor()
->getMock();

$event
->expects($this->any())
->method('getRequest')
->willReturn($request)
;
->willReturn($request);

$event
->expects($this->any())
->method('getResponse')
->willReturn($response)
;
->willReturn($response);

return $event;
}
Expand Down
5 changes: 4 additions & 1 deletion Tests/EventListener/IsGrantedListenerTest.php
Expand Up @@ -17,6 +17,7 @@
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent;
use Symfony\Component\HttpKernel\Event\FilterControllerArgumentsEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
Expand Down Expand Up @@ -177,7 +178,9 @@ private function createRequest(IsGranted $isGranted = null)

private function createFilterControllerEvent(Request $request)
{
return new ControllerArgumentsEvent($this->getMockBuilder(HttpKernelInterface::class)->getMock(), function () {
$eventClass = class_exists(ControllerArgumentsEvent::class) ? ControllerArgumentsEvent::class : FilterControllerArgumentsEvent::class;

return new $eventClass($this->getMockBuilder(HttpKernelInterface::class)->getMock(), function () {
return new Response();
}, [], $request, null);
}
Expand Down
13 changes: 9 additions & 4 deletions Tests/EventListener/ParamConverterListenerTest.php
Expand Up @@ -16,6 +16,7 @@
use Sensio\Bundle\FrameworkExtraBundle\Tests\EventListener\Fixture\FooControllerNullableParameter;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;

class ParamConverterListenerTest extends \PHPUnit\Framework\TestCase
{
Expand All @@ -26,9 +27,10 @@ public function testRequestIsSkipped($controllerCallable)
{
$kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
$request = new Request();
$eventClass = class_exists(ControllerEvent::class) ? ControllerEvent::class : FilterControllerEvent::class;

$listener = new ParamConverterListener($this->getParamConverterManager($request, []));
$event = new ControllerEvent($kernel, $controllerCallable, $request, null);
$event = new $eventClass($kernel, $controllerCallable, $request, null);

$listener->onKernelController($event);
}
Expand All @@ -48,11 +50,12 @@ public function testAutoConvert($controllerCallable)
{
$kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
$request = new Request([], [], ['date' => '2014-03-14 09:00:00']);
$eventClass = class_exists(ControllerEvent::class) ? ControllerEvent::class : FilterControllerEvent::class;

$converter = new ParamConverter(['name' => 'date', 'class' => 'DateTime']);

$listener = new ParamConverterListener($this->getParamConverterManager($request, ['date' => $converter]));
$event = new ControllerEvent($kernel, $controllerCallable, $request, null);
$event = new $eventClass($kernel, $controllerCallable, $request, null);

$listener->onKernelController($event);
}
Expand All @@ -65,12 +68,13 @@ public function testSettingOptionalParam($function, $isOptional)
{
$kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
$request = new Request();
$eventClass = class_exists(ControllerEvent::class) ? ControllerEvent::class : FilterControllerEvent::class;

$converter = new ParamConverter(['name' => 'param', 'class' => 'DateTime']);
$converter->setIsOptional($isOptional);

$listener = new ParamConverterListener($this->getParamConverterManager($request, ['param' => $converter]), true);
$event = new ControllerEvent(
$event = new $eventClass(
$kernel,
[
new FooControllerNullableParameter(),
Expand Down Expand Up @@ -99,9 +103,10 @@ public function testNoAutoConvert($controllerCallable)
{
$kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
$request = new Request([], [], ['date' => '2014-03-14 09:00:00']);
$eventClass = class_exists(ControllerEvent::class) ? ControllerEvent::class : FilterControllerEvent::class;

$listener = new ParamConverterListener($this->getParamConverterManager($request, []), false);
$event = new ControllerEvent($kernel, $controllerCallable, $request, null);
$event = new $eventClass($kernel, $controllerCallable, $request, null);

$listener->onKernelController($event);
}
Expand Down

0 comments on commit 646b3f2

Please sign in to comment.