diff --git a/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php b/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php index c76b57bb6a..a1cff53535 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php +++ b/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php @@ -36,6 +36,13 @@ class ControllerResolver implements ControllerResolverInterface */ private $supportsVariadic; + /** + * If scalar types exists. + * + * @var bool + */ + private $supportsScalarTypes; + /** * Constructor. * @@ -46,6 +53,7 @@ class ControllerResolver implements ControllerResolverInterface $this->logger = $logger; $this->supportsVariadic = method_exists('ReflectionParameter', 'isVariadic'); + $this->supportsScalarTypes = method_exists('ReflectionParameter', 'getType'); } /** @@ -132,7 +140,7 @@ class ControllerResolver implements ControllerResolverInterface $arguments[] = $request; } elseif ($param->isDefaultValueAvailable()) { $arguments[] = $param->getDefaultValue(); - } elseif ($param->allowsNull()) { + } elseif ($this->supportsScalarTypes && $param->hasType() && $param->allowsNull()) { $arguments[] = null; } else { if (is_array($controller)) { diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php index 9aa7e20a9a..f3b0ac025d 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php @@ -223,6 +223,19 @@ class ControllerResolverTest extends \PHPUnit_Framework_TestCase $mock->getController($request); } + /** + * @expectedException \RuntimeException + */ + public function testIfExceptionIsThrownWhenMissingAnArgument() + { + $resolver = new ControllerResolver(); + $request = Request::create('/'); + + $controller = array($this, 'controllerMethod1'); + + $resolver->getArguments($request, $controller); + } + /** * @requires PHP 7.1 */