Skip to content
Snippets Groups Projects
Commit 585216a8 authored by Robin Chalas's avatar Robin Chalas
Browse files

[HttpKernel] Flatten "exception" controller argument if not typed

parent 278dcfb3
Branches
Tags
No related merge requests found
......@@ -99,7 +99,7 @@ class ErrorListener implements EventSubscriberInterface
$r = new \ReflectionFunction(\Closure::fromCallable($event->getController()));
$r = $r->getParameters()[$k] ?? null;
if ($r && $r->hasType() && FlattenException::class === $r->getType()->getName()) {
if ($r && (!$r->hasType() || FlattenException::class === $r->getType()->getName())) {
$arguments = $event->getArguments();
$arguments[$k] = FlattenException::createFromThrowable($e);
$event->setArguments($arguments);
......
......@@ -13,8 +13,8 @@ namespace Symfony\Component\HttpKernel\Tests\EventListener;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\ErrorHandler\Exception\FlattenException;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Controller\ArgumentResolver;
......@@ -158,12 +158,11 @@ class ErrorListenerTest extends TestCase
$this->assertFalse($dispatcher->hasListeners(KernelEvents::RESPONSE), 'CSP removal listener has been removed');
}
public function testOnControllerArguments()
/**
* @dataProvider controllerProvider
*/
public function testOnControllerArguments(callable $controller)
{
$controller = function (FlattenException $exception) {
return new Response('OK: '.$exception->getMessage());
};
$listener = new ErrorListener($controller, $this->createMock(LoggerInterface::class), true);
$kernel = $this->createMock(HttpKernelInterface::class);
......@@ -181,6 +180,23 @@ class ErrorListenerTest extends TestCase
$this->assertSame('OK: foo', $event->getResponse()->getContent());
}
public function controllerProvider()
{
yield [function (FlattenException $exception) {
return new Response('OK: '.$exception->getMessage());
}];
yield [function ($exception) {
$this->assertInstanceOf(FlattenException::class, $exception);
return new Response('OK: '.$exception->getMessage());
}];
yield [function (\Throwable $exception) {
return new Response('OK: '.$exception->getMessage());
}];
}
}
class TestLogger extends Logger implements DebugLoggerInterface
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment