bug #15425 [Routing] Fix the retrieval of the default value for variadic arguments in the annotation loader (wdalmut, stof)
This PR was merged into the 2.3 branch. Discussion ---------- [Routing] Fix the retrieval of the default value for variadic arguments in the annotation loader | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #13690 | License | MIT | Doc PR | n/a This takes the test submitted in #13690 and implements the fix for this bug Commits -------73c5eff
Fix the retrieval of the default value for variadic arguments9b7d4c7
Annotated routes with a variadic parameter
This commit is contained in:
commit
e5909bea2c
@ -180,7 +180,7 @@ abstract class AnnotationClassLoader implements LoaderInterface
|
|||||||
|
|
||||||
$defaults = array_replace($globals['defaults'], $annot->getDefaults());
|
$defaults = array_replace($globals['defaults'], $annot->getDefaults());
|
||||||
foreach ($method->getParameters() as $param) {
|
foreach ($method->getParameters() as $param) {
|
||||||
if (!isset($defaults[$param->getName()]) && $param->isOptional()) {
|
if (!isset($defaults[$param->getName()]) && $param->isDefaultValueAvailable()) {
|
||||||
$defaults[$param->getName()] = $param->getDefaultValue();
|
$defaults[$param->getName()] = $param->getDefaultValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Routing\Tests\Fixtures\OtherAnnotatedClasses;
|
||||||
|
|
||||||
|
class VariadicClass
|
||||||
|
{
|
||||||
|
public function routeAction(...$params)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -16,6 +16,7 @@ use Symfony\Component\Routing\Annotation\Route;
|
|||||||
class AnnotationClassLoaderTest extends AbstractAnnotationLoaderTest
|
class AnnotationClassLoaderTest extends AbstractAnnotationLoaderTest
|
||||||
{
|
{
|
||||||
protected $loader;
|
protected $loader;
|
||||||
|
private $reader;
|
||||||
|
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
|
@ -13,6 +13,7 @@ namespace Symfony\Component\Routing\Tests\Loader;
|
|||||||
|
|
||||||
use Symfony\Component\Routing\Loader\AnnotationFileLoader;
|
use Symfony\Component\Routing\Loader\AnnotationFileLoader;
|
||||||
use Symfony\Component\Config\FileLocator;
|
use Symfony\Component\Config\FileLocator;
|
||||||
|
use Symfony\Component\Routing\Annotation\Route;
|
||||||
|
|
||||||
class AnnotationFileLoaderTest extends AbstractAnnotationLoaderTest
|
class AnnotationFileLoaderTest extends AbstractAnnotationLoaderTest
|
||||||
{
|
{
|
||||||
@ -34,6 +35,19 @@ class AnnotationFileLoaderTest extends AbstractAnnotationLoaderTest
|
|||||||
$this->loader->load(__DIR__.'/../Fixtures/AnnotatedClasses/FooClass.php');
|
$this->loader->load(__DIR__.'/../Fixtures/AnnotatedClasses/FooClass.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @requires PHP 5.6
|
||||||
|
*/
|
||||||
|
public function testLoadVariadic()
|
||||||
|
{
|
||||||
|
$route = new Route(array('path' => '/path/to/{id}'));
|
||||||
|
$this->reader->expects($this->once())->method('getClassAnnotation');
|
||||||
|
$this->reader->expects($this->once())->method('getMethodAnnotations')
|
||||||
|
->will($this->returnValue(array($route)));
|
||||||
|
|
||||||
|
$this->loader->load(__DIR__.'/../Fixtures/OtherAnnotatedClasses/VariadicClass.php');
|
||||||
|
}
|
||||||
|
|
||||||
public function testSupports()
|
public function testSupports()
|
||||||
{
|
{
|
||||||
$fixture = __DIR__.'/../Fixtures/annotated.php';
|
$fixture = __DIR__.'/../Fixtures/annotated.php';
|
||||||
|
Reference in New Issue
Block a user