From 2bcd9be0d5e6f4e7cb77afe0e4668fc100a8d611 Mon Sep 17 00:00:00 2001 From: Pascal Luna Date: Mon, 19 Mar 2018 15:17:28 +0000 Subject: [PATCH 1/3] [Routing] Fixed the importing of files using glob patterns that match multiple resources --- .../Routing/Loader/XmlFileLoader.php | 43 +++++++++++-------- .../Routing/Loader/YamlFileLoader.php | 43 +++++++++++-------- .../Routing/Tests/Fixtures/glob/bar.xml | 8 ++++ .../Routing/Tests/Fixtures/glob/bar.yml | 4 ++ .../Routing/Tests/Fixtures/glob/baz.xml | 8 ++++ .../Routing/Tests/Fixtures/glob/baz.yml | 4 ++ .../Tests/Fixtures/glob/import_multiple.xml | 8 ++++ .../Tests/Fixtures/glob/import_multiple.yml | 2 + .../Tests/Fixtures/glob/import_single.xml | 8 ++++ .../Tests/Fixtures/glob/import_single.yml | 2 + .../Tests/Loader/XmlFileLoaderTest.php | 21 +++++++++ .../Tests/Loader/YamlFileLoaderTest.php | 21 +++++++++ 12 files changed, 136 insertions(+), 36 deletions(-) create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/bar.xml create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/bar.yml create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/baz.xml create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/baz.yml create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/import_multiple.xml create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/import_multiple.yml create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/import_single.xml create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/import_single.yml diff --git a/src/Symfony/Component/Routing/Loader/XmlFileLoader.php b/src/Symfony/Component/Routing/Loader/XmlFileLoader.php index 3a77890703ce2..f3f66055e675a 100644 --- a/src/Symfony/Component/Routing/Loader/XmlFileLoader.php +++ b/src/Symfony/Component/Routing/Loader/XmlFileLoader.php @@ -146,26 +146,33 @@ protected function parseImport(RouteCollection $collection, \DOMElement $node, $ $this->setCurrentDir(dirname($path)); - $subCollection = $this->import($resource, ('' !== $type ? $type : null), false, $file); - /* @var $subCollection RouteCollection */ - $subCollection->addPrefix($prefix); - if (null !== $host) { - $subCollection->setHost($host); - } - if (null !== $condition) { - $subCollection->setCondition($condition); - } - if (null !== $schemes) { - $subCollection->setSchemes($schemes); - } - if (null !== $methods) { - $subCollection->setMethods($methods); + $imported = $this->import($resource, ('' !== $type ? $type : null), false, $file); + + if (!is_array($imported)) { + $imported = array($imported); } - $subCollection->addDefaults($defaults); - $subCollection->addRequirements($requirements); - $subCollection->addOptions($options); - $collection->addCollection($subCollection); + foreach ($imported as $subCollection) { + /* @var $subCollection RouteCollection */ + $subCollection->addPrefix($prefix); + if (null !== $host) { + $subCollection->setHost($host); + } + if (null !== $condition) { + $subCollection->setCondition($condition); + } + if (null !== $schemes) { + $subCollection->setSchemes($schemes); + } + if (null !== $methods) { + $subCollection->setMethods($methods); + } + $subCollection->addDefaults($defaults); + $subCollection->addRequirements($requirements); + $subCollection->addOptions($options); + + $collection->addCollection($subCollection); + } } /** diff --git a/src/Symfony/Component/Routing/Loader/YamlFileLoader.php b/src/Symfony/Component/Routing/Loader/YamlFileLoader.php index 037d581d05eab..f59f9097f6c6d 100644 --- a/src/Symfony/Component/Routing/Loader/YamlFileLoader.php +++ b/src/Symfony/Component/Routing/Loader/YamlFileLoader.php @@ -158,26 +158,33 @@ protected function parseImport(RouteCollection $collection, array $config, $path $this->setCurrentDir(dirname($path)); - $subCollection = $this->import($config['resource'], $type, false, $file); - /* @var $subCollection RouteCollection */ - $subCollection->addPrefix($prefix); - if (null !== $host) { - $subCollection->setHost($host); - } - if (null !== $condition) { - $subCollection->setCondition($condition); - } - if (null !== $schemes) { - $subCollection->setSchemes($schemes); - } - if (null !== $methods) { - $subCollection->setMethods($methods); + $imported = $this->import($config['resource'], $type, false, $file); + + if (!is_array($imported)) { + $imported = array($imported); } - $subCollection->addDefaults($defaults); - $subCollection->addRequirements($requirements); - $subCollection->addOptions($options); - $collection->addCollection($subCollection); + foreach ($imported as $subCollection) { + /* @var $subCollection RouteCollection */ + $subCollection->addPrefix($prefix); + if (null !== $host) { + $subCollection->setHost($host); + } + if (null !== $condition) { + $subCollection->setCondition($condition); + } + if (null !== $schemes) { + $subCollection->setSchemes($schemes); + } + if (null !== $methods) { + $subCollection->setMethods($methods); + } + $subCollection->addDefaults($defaults); + $subCollection->addRequirements($requirements); + $subCollection->addOptions($options); + + $collection->addCollection($subCollection); + } } /** diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/bar.xml b/src/Symfony/Component/Routing/Tests/Fixtures/glob/bar.xml new file mode 100644 index 0000000000000..0d31eeb178fc9 --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/bar.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/bar.yml b/src/Symfony/Component/Routing/Tests/Fixtures/glob/bar.yml new file mode 100644 index 0000000000000..ba3bc2294b340 --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/bar.yml @@ -0,0 +1,4 @@ +bar_route: + path: /bar + defaults: + _controller: AppBundle:Bar:view diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/baz.xml b/src/Symfony/Component/Routing/Tests/Fixtures/glob/baz.xml new file mode 100644 index 0000000000000..3abba1acede10 --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/baz.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/baz.yml b/src/Symfony/Component/Routing/Tests/Fixtures/glob/baz.yml new file mode 100644 index 0000000000000..f7d8c67f266a8 --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/baz.yml @@ -0,0 +1,4 @@ +baz_route: + path: /baz + defaults: + _controller: AppBundle:Baz:view diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_multiple.xml b/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_multiple.xml new file mode 100644 index 0000000000000..ca6b1b5a927bb --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_multiple.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_multiple.yml b/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_multiple.yml new file mode 100644 index 0000000000000..d1ae5854a51c1 --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_multiple.yml @@ -0,0 +1,2 @@ +_static: + resource: ba?.yml diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_single.xml b/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_single.xml new file mode 100644 index 0000000000000..15f5698ccd712 --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_single.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_single.yml b/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_single.yml new file mode 100644 index 0000000000000..f56ddbd0be9f7 --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/import_single.yml @@ -0,0 +1,2 @@ +_static: + resource: b?r.yml diff --git a/src/Symfony/Component/Routing/Tests/Loader/XmlFileLoaderTest.php b/src/Symfony/Component/Routing/Tests/Loader/XmlFileLoaderTest.php index 221434b0068aa..21fc3400f249e 100644 --- a/src/Symfony/Component/Routing/Tests/Loader/XmlFileLoaderTest.php +++ b/src/Symfony/Component/Routing/Tests/Loader/XmlFileLoaderTest.php @@ -361,4 +361,25 @@ public function testImportWithOverriddenController() $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures/controller'))); $loader->load('import_override_defaults.xml'); } + + public function testImportRouteWithGlobMatchingSingleFile() + { + $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures/glob'))); + $routeCollection = $loader->load('import_single.xml'); + + $route = $routeCollection->get('bar_route'); + $this->assertSame('AppBundle:Bar:view', $route->getDefault('_controller')); + } + + public function testImportRouteWithGlobMatchingMultipleFiles() + { + $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures/glob'))); + $routeCollection = $loader->load('import_multiple.xml'); + + $route = $routeCollection->get('bar_route'); + $this->assertSame('AppBundle:Bar:view', $route->getDefault('_controller')); + + $route = $routeCollection->get('baz_route'); + $this->assertSame('AppBundle:Baz:view', $route->getDefault('_controller')); + } } diff --git a/src/Symfony/Component/Routing/Tests/Loader/YamlFileLoaderTest.php b/src/Symfony/Component/Routing/Tests/Loader/YamlFileLoaderTest.php index 1f7fd43897ae3..822bddf1f0c34 100644 --- a/src/Symfony/Component/Routing/Tests/Loader/YamlFileLoaderTest.php +++ b/src/Symfony/Component/Routing/Tests/Loader/YamlFileLoaderTest.php @@ -182,4 +182,25 @@ public function testImportWithOverriddenController() $loader = new YamlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures/controller'))); $loader->load('import_override_defaults.yml'); } + + public function testImportRouteWithGlobMatchingSingleFile() + { + $loader = new YamlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures/glob'))); + $routeCollection = $loader->load('import_single.yml'); + + $route = $routeCollection->get('bar_route'); + $this->assertSame('AppBundle:Bar:view', $route->getDefault('_controller')); + } + + public function testImportRouteWithGlobMatchingMultipleFiles() + { + $loader = new YamlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures/glob'))); + $routeCollection = $loader->load('import_multiple.yml'); + + $route = $routeCollection->get('bar_route'); + $this->assertSame('AppBundle:Bar:view', $route->getDefault('_controller')); + + $route = $routeCollection->get('baz_route'); + $this->assertSame('AppBundle:Baz:view', $route->getDefault('_controller')); + } } From e5dfabad69257616f61076407f0fef585ce84c06 Mon Sep 17 00:00:00 2001 From: Pascal Luna Date: Mon, 19 Mar 2018 16:51:47 +0000 Subject: [PATCH 2/3] Fixed glob patterns support in RoutingConfigurator --- .../Loader/Configurator/RoutingConfigurator.php | 12 ++++++++++-- .../Routing/Tests/Fixtures/glob/php_dsl.php | 7 +++++++ .../Routing/Tests/Fixtures/glob/php_dsl_bar.php | 12 ++++++++++++ .../Routing/Tests/Fixtures/glob/php_dsl_baz.php | 12 ++++++++++++ .../Routing/Tests/Loader/PhpFileLoaderTest.php | 13 +++++++++++++ 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl.php create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_bar.php create mode 100644 src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_baz.php diff --git a/src/Symfony/Component/Routing/Loader/Configurator/RoutingConfigurator.php b/src/Symfony/Component/Routing/Loader/Configurator/RoutingConfigurator.php index 4591a86ba5cf9..d992cef843975 100644 --- a/src/Symfony/Component/Routing/Loader/Configurator/RoutingConfigurator.php +++ b/src/Symfony/Component/Routing/Loader/Configurator/RoutingConfigurator.php @@ -39,9 +39,17 @@ public function __construct(RouteCollection $collection, PhpFileLoader $loader, final public function import($resource, $type = null, $ignoreErrors = false) { $this->loader->setCurrentDir(dirname($this->path)); - $subCollection = $this->loader->import($resource, $type, $ignoreErrors, $this->file); + $imported = $this->loader->import($resource, $type, $ignoreErrors, $this->file); + if (!is_array($imported)) { + return new ImportConfigurator($this->collection, $imported); + } - return new ImportConfigurator($this->collection, $subCollection); + $mergedCollection = new RouteCollection(); + foreach ($imported as $subCollection) { + $mergedCollection->addCollection($subCollection); + } + + return new ImportConfigurator($this->collection, $mergedCollection); } /** diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl.php b/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl.php new file mode 100644 index 0000000000000..897fa11f282af --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl.php @@ -0,0 +1,7 @@ +import('php_dsl_ba?.php'); +}; diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_bar.php b/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_bar.php new file mode 100644 index 0000000000000..e6ccf24f4e529 --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_bar.php @@ -0,0 +1,12 @@ +collection(); + + $collection->add('bar_route', '/bar') + ->defaults(['_controller' => 'AppBundle:Bar:view']); + + return $collection; +}; diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_baz.php b/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_baz.php new file mode 100644 index 0000000000000..cce65d7054f96 --- /dev/null +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_baz.php @@ -0,0 +1,12 @@ +collection(); + + $collection->add('baz_route', '/baz') + ->defaults(['_controller' => 'AppBundle:Baz:view']); + + return $collection; +}; diff --git a/src/Symfony/Component/Routing/Tests/Loader/PhpFileLoaderTest.php b/src/Symfony/Component/Routing/Tests/Loader/PhpFileLoaderTest.php index 608d84ed7a20f..0dcf5d4941bef 100644 --- a/src/Symfony/Component/Routing/Tests/Loader/PhpFileLoaderTest.php +++ b/src/Symfony/Component/Routing/Tests/Loader/PhpFileLoaderTest.php @@ -117,4 +117,17 @@ public function testRoutingConfigurator() $this->assertEquals($expectedCollection, $routeCollection); } + + public function testRoutingConfiguratorCanImportGlobPatterns() + { + $locator = new FileLocator(array(__DIR__.'/../Fixtures/glob')); + $loader = new PhpFileLoader($locator); + $routeCollection = $loader->load('php_dsl.php'); + + $route = $routeCollection->get('bar_route'); + $this->assertSame('AppBundle:Bar:view', $route->getDefault('_controller')); + + $route = $routeCollection->get('baz_route'); + $this->assertSame('AppBundle:Baz:view', $route->getDefault('_controller')); + } } From 5f5f3aad8acb09e6f4b74487ec50d4bf4d647254 Mon Sep 17 00:00:00 2001 From: Pascal Luna Date: Mon, 19 Mar 2018 17:28:53 +0000 Subject: [PATCH 3/3] Fixed CS --- .../Component/Routing/Tests/Fixtures/glob/php_dsl_bar.php | 2 +- .../Component/Routing/Tests/Fixtures/glob/php_dsl_baz.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_bar.php b/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_bar.php index e6ccf24f4e529..e2b91b17da490 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_bar.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_bar.php @@ -6,7 +6,7 @@ $collection = $routes->collection(); $collection->add('bar_route', '/bar') - ->defaults(['_controller' => 'AppBundle:Bar:view']); + ->defaults(array('_controller' => 'AppBundle:Bar:view')); return $collection; }; diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_baz.php b/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_baz.php index cce65d7054f96..ca8f188a7633e 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_baz.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/glob/php_dsl_baz.php @@ -6,7 +6,7 @@ $collection = $routes->collection(); $collection->add('baz_route', '/baz') - ->defaults(['_controller' => 'AppBundle:Baz:view']); + ->defaults(array('_controller' => 'AppBundle:Baz:view')); return $collection; }; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy