[Routing] Fix supporting string "methods" and "schemes" on the Route annotation

This commit is contained in:
Thomas Calvet 2021-04-13 17:11:44 +02:00
parent dd919a7233
commit b5f61c31e5
4 changed files with 68 additions and 4 deletions

View File

@ -41,8 +41,8 @@ class Route
* @param array|string $data data array managed by the Doctrine Annotations library or the path
* @param array|string|null $path
* @param string[] $requirements
* @param string[] $methods
* @param string[] $schemes
* @param string[]|string $methods
* @param string[]|string $schemes
*
* @throws \BadMethodCallException
*/
@ -54,8 +54,8 @@ class Route
array $options = [],
array $defaults = [],
string $host = null,
array $methods = [],
array $schemes = [],
$methods = [],
$schemes = [],
string $condition = null,
int $priority = null,
string $locale = null,

View File

@ -0,0 +1,29 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\AnnotationFixtures;
use Symfony\Component\Routing\Annotation\Route;
final class MethodsAndSchemes
{
/**
* @Route("/array-many", name="array_many", methods={"GET", "POST"}, schemes={"http", "https"})
*/
public function arrayMany(): void
{
}
/**
* @Route("/array-one", name="array_one", methods={"GET"}, schemes={"http"})
*/
public function arrayOne(): void
{
}
/**
* @Route("/string", name="string", methods="POST", schemes="https")
*/
public function string(): void
{
}
}

View File

@ -0,0 +1,23 @@
<?php
namespace Symfony\Component\Routing\Tests\Fixtures\AttributeFixtures;
use Symfony\Component\Routing\Annotation\Route;
final class MethodsAndSchemes
{
#[Route(path: '/array-many', name: 'array_many', methods: ['GET', 'POST'], schemes: ['http', 'https'])]
public function arrayMany(): void
{
}
#[Route(path: '/array-one', name: 'array_one', methods: ['GET'], schemes: ['http'])]
public function arrayOne(): void
{
}
#[Route(path: '/string', name: 'string', methods: 'POST', schemes: 'https')]
public function string(): void
{
}
}

View File

@ -258,5 +258,17 @@ abstract class AnnotationClassLoaderTest extends TestCase
$this->assertSame('/path', $routes->get('action')->getPath());
}
public function testMethodsAndSchemes()
{
$routes = $this->loader->load($this->getNamespace().'\MethodsAndSchemes');
$this->assertSame(['GET', 'POST'], $routes->get('array_many')->getMethods());
$this->assertSame(['http', 'https'], $routes->get('array_many')->getSchemes());
$this->assertSame(['GET'], $routes->get('array_one')->getMethods());
$this->assertSame(['http'], $routes->get('array_one')->getSchemes());
$this->assertSame(['POST'], $routes->get('string')->getMethods());
$this->assertSame(['https'], $routes->get('string')->getSchemes());
}
abstract protected function getNamespace(): string;
}