minor #31938 [FrameworkBundle] fix FC with HttpKernel v5 (nicolas-grekas)

This PR was merged into the 4.4 branch.

Discussion
----------

[FrameworkBundle] fix FC with HttpKernel v5

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

This class is deprecated and is thus not enough a reason to conflict with http-kernel v5

Should unlock #31918

Commits
-------

6c109c71a9 [FrameworkBundle] fix FC with HttpKernel v5
This commit is contained in:
Nicolas Grekas 2019-06-07 20:31:13 +02:00
commit 02a792a313
2 changed files with 32 additions and 6 deletions

View File

@ -13,7 +13,7 @@ namespace Symfony\Bundle\FrameworkBundle\EventListener;
use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser; use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser;
use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\KernelEvents;
/** /**
@ -21,6 +21,8 @@ use Symfony\Component\HttpKernel\KernelEvents;
* *
* @author Ryan Weaver <ryan@knpuniversity.com> * @author Ryan Weaver <ryan@knpuniversity.com>
* *
* @method onKernelRequest(RequestEvent $event)
*
* @deprecated since Symfony 4.1 * @deprecated since Symfony 4.1
*/ */
class ResolveControllerNameSubscriber implements EventSubscriberInterface class ResolveControllerNameSubscriber implements EventSubscriberInterface
@ -36,8 +38,22 @@ class ResolveControllerNameSubscriber implements EventSubscriberInterface
$this->parser = $parser; $this->parser = $parser;
} }
public function onKernelRequest(GetResponseEvent $event) /**
* @internal
*/
public function resolveControllerName(...$args)
{ {
$this->onKernelRequest(...$args);
}
public function __call(string $method, array $args)
{
if ('onKernelRequest' !== $method && 'onKernelRequest' !== strtolower($method)) {
throw new \Error(sprintf('Error: Call to undefined method %s::%s()', \get_class($this), $method));
}
$event = $args[0];
$controller = $event->getRequest()->attributes->get('_controller'); $controller = $event->getRequest()->attributes->get('_controller');
if (\is_string($controller) && false === strpos($controller, '::') && 2 === substr_count($controller, ':')) { if (\is_string($controller) && false === strpos($controller, '::') && 2 === substr_count($controller, ':')) {
// controller in the a:b:c notation then // controller in the a:b:c notation then
@ -50,7 +66,7 @@ class ResolveControllerNameSubscriber implements EventSubscriberInterface
public static function getSubscribedEvents() public static function getSubscribedEvents()
{ {
return [ return [
KernelEvents::REQUEST => ['onKernelRequest', 24], KernelEvents::REQUEST => ['resolveControllerName', 24],
]; ];
} }
} }

View File

@ -15,6 +15,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser;
use Symfony\Bundle\FrameworkBundle\EventListener\ResolveControllerNameSubscriber; use Symfony\Bundle\FrameworkBundle\EventListener\ResolveControllerNameSubscriber;
use Symfony\Bundle\FrameworkBundle\Tests\TestCase; use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
@ -23,9 +24,6 @@ use Symfony\Component\HttpKernel\HttpKernelInterface;
*/ */
class ResolveControllerNameSubscriberTest extends TestCase class ResolveControllerNameSubscriberTest extends TestCase
{ {
/**
* @group legacy
*/
public function testReplacesControllerAttribute() public function testReplacesControllerAttribute()
{ {
$parser = $this->getMockBuilder(ControllerNameParser::class)->disableOriginalConstructor()->getMock(); $parser = $this->getMockBuilder(ControllerNameParser::class)->disableOriginalConstructor()->getMock();
@ -41,6 +39,10 @@ class ResolveControllerNameSubscriberTest extends TestCase
$subscriber = new ResolveControllerNameSubscriber($parser); $subscriber = new ResolveControllerNameSubscriber($parser);
$subscriber->onKernelRequest(new RequestEvent($httpKernel, $request, HttpKernelInterface::MASTER_REQUEST)); $subscriber->onKernelRequest(new RequestEvent($httpKernel, $request, HttpKernelInterface::MASTER_REQUEST));
$this->assertEquals('App\\Final\\Format::methodName', $request->attributes->get('_controller')); $this->assertEquals('App\\Final\\Format::methodName', $request->attributes->get('_controller'));
$subscriber = new ChildResolveControllerNameSubscriber($parser);
$subscriber->onKernelRequest(new RequestEvent($httpKernel, $request, HttpKernelInterface::MASTER_REQUEST));
$this->assertEquals('App\\Final\\Format::methodName', $request->attributes->get('_controller'));
} }
/** /**
@ -67,3 +69,11 @@ class ResolveControllerNameSubscriberTest extends TestCase
yield [function () {}]; yield [function () {}];
} }
} }
class ChildResolveControllerNameSubscriber extends ResolveControllerNameSubscriber
{
public function onKernelRequest(GetResponseEvent $event)
{
parent::onKernelRequest($event);
}
}