aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNils Adermann <naderman@naderman.de>2013-10-22 00:29:20 -0700
committerNils Adermann <naderman@naderman.de>2013-10-22 00:29:20 -0700
commita7e41b23fd7e7f39b1e37796eca618a59e0cb9be (patch)
treef6f1ab691dce3e59204271a7e4c4463f406ac27d
parentba5b53521a186dc23d6d4b849c7f76196c783d43 (diff)
parent96317b2c4518976c683dd67f38a8a6f8faabdf15 (diff)
downloadforums-a7e41b23fd7e7f39b1e37796eca618a59e0cb9be.tar
forums-a7e41b23fd7e7f39b1e37796eca618a59e0cb9be.tar.gz
forums-a7e41b23fd7e7f39b1e37796eca618a59e0cb9be.tar.bz2
forums-a7e41b23fd7e7f39b1e37796eca618a59e0cb9be.tar.xz
forums-a7e41b23fd7e7f39b1e37796eca618a59e0cb9be.zip
Merge pull request #1801 from nickvergessen/ticket/11948
Ticket/11948 Extensions should be allowed to have more then 1 routing file
-rw-r--r--phpBB/includes/functions_url_matcher.php8
-rw-r--r--phpBB/phpbb/controller/provider.php21
-rw-r--r--tests/controller/controller_test.php11
-rw-r--r--tests/controller/ext/foo/config/routing.yml4
-rw-r--r--tests/controller/ext/foo/config/routing_2.yml3
5 files changed, 30 insertions, 17 deletions
diff --git a/phpBB/includes/functions_url_matcher.php b/phpBB/includes/functions_url_matcher.php
index fdde302e3b..c5d6815119 100644
--- a/phpBB/includes/functions_url_matcher.php
+++ b/phpBB/includes/functions_url_matcher.php
@@ -32,7 +32,7 @@ function phpbb_get_url_matcher(\phpbb\extension\finder $finder, RequestContext $
{
if (defined('DEBUG'))
{
- return phpbb_create_url_matcher($finder, $context);
+ return phpbb_create_url_matcher($finder, $context, $root_path);
}
if (!phpbb_url_matcher_dumped($root_path, $php_ext))
@@ -54,7 +54,7 @@ function phpbb_get_url_matcher(\phpbb\extension\finder $finder, RequestContext $
function phpbb_create_dumped_url_matcher(\phpbb\extension\finder $finder, $root_path, $php_ext)
{
$provider = new \phpbb\controller\provider();
- $routes = $provider->import_paths_from_finder($finder)->find();
+ $routes = $provider->import_paths_from_finder($finder)->find($root_path);
$dumper = new PhpMatcherDumper($routes);
$cached_url_matcher_dump = $dumper->dump(array(
'class' => 'phpbb_url_matcher',
@@ -70,10 +70,10 @@ function phpbb_create_dumped_url_matcher(\phpbb\extension\finder $finder, $root_
* @param RequestContext $context Symfony RequestContext object
* @return UrlMatcher
*/
-function phpbb_create_url_matcher(\phpbb\extension\finder $finder, RequestContext $context)
+function phpbb_create_url_matcher(\phpbb\extension\finder $finder, RequestContext $context, $root_path)
{
$provider = new \phpbb\controller\provider();
- $routes = $provider->import_paths_from_finder($finder)->find();
+ $routes = $provider->import_paths_from_finder($finder)->find($root_path);
return new UrlMatcher($routes, $context);
}
diff --git a/phpBB/phpbb/controller/provider.php b/phpBB/phpbb/controller/provider.php
index 3aad08e3aa..048ca72084 100644
--- a/phpBB/phpbb/controller/provider.php
+++ b/phpBB/phpbb/controller/provider.php
@@ -31,17 +31,17 @@ class provider
* YAML file(s) containing route information
* @var array
*/
- protected $routing_paths;
+ protected $routing_files;
/**
* Construct method
*
- * @param array() $routing_paths Array of strings containing paths
+ * @param array() $routing_files Array of strings containing paths
* to YAML files holding route information
*/
- public function __construct($routing_paths = array())
+ public function __construct($routing_files = array())
{
- $this->routing_paths = $routing_paths;
+ $this->routing_files = $routing_files;
}
/**
@@ -54,12 +54,11 @@ class provider
{
// We hardcode the path to the core config directory
// because the finder cannot find it
- $this->routing_paths = array_merge(array('config'), array_map('dirname', array_keys($finder
+ $this->routing_files = array_merge(array('config/routing.yml'), array_keys($finder
->directory('config')
- ->prefix('routing')
- ->suffix('yml')
+ ->suffix('routing.yml')
->find()
- )));
+ ));
return $this;
}
@@ -73,10 +72,10 @@ class provider
public function find($base_path = '')
{
$routes = new RouteCollection;
- foreach ($this->routing_paths as $path)
+ foreach ($this->routing_files as $file_path)
{
- $loader = new YamlFileLoader(new FileLocator($base_path . $path));
- $routes->addCollection($loader->load('routing.yml'));
+ $loader = new YamlFileLoader(new FileLocator($base_path));
+ $routes->addCollection($loader->load($file_path));
}
return $routes;
diff --git a/tests/controller/controller_test.php b/tests/controller/controller_test.php
index 10fced05a2..588adbcfb1 100644
--- a/tests/controller/controller_test.php
+++ b/tests/controller/controller_test.php
@@ -34,10 +34,17 @@ class phpbb_controller_controller_test extends phpbb_test_case
$provider = new \phpbb\controller\provider;
$routes = $provider
->import_paths_from_finder($this->extension_manager->get_finder())
- ->find('./tests/controller/');
+ ->find(__DIR__);
// This will need to be updated if any new routes are defined
- $this->assertEquals(2, sizeof($routes));
+ $this->assertInstanceOf('Symfony\Component\Routing\Route', $routes->get('core_controller'));
+ $this->assertEquals('/core_foo', $routes->get('core_controller')->getPath());
+
+ $this->assertInstanceOf('Symfony\Component\Routing\Route', $routes->get('controller1'));
+ $this->assertEquals('/foo', $routes->get('controller1')->getPath());
+
+ $this->assertInstanceOf('Symfony\Component\Routing\Route', $routes->get('controller2'));
+ $this->assertEquals('/foo/bar', $routes->get('controller2')->getPath());
}
public function test_controller_resolver()
diff --git a/tests/controller/ext/foo/config/routing.yml b/tests/controller/ext/foo/config/routing.yml
index 4799fec37d..6cc275d96d 100644
--- a/tests/controller/ext/foo/config/routing.yml
+++ b/tests/controller/ext/foo/config/routing.yml
@@ -1,3 +1,7 @@
controller1:
pattern: /foo
defaults: { _controller: foo.controller:handle }
+
+include_controller2:
+ resource: "routing_2.yml"
+ prefix: /foo
diff --git a/tests/controller/ext/foo/config/routing_2.yml b/tests/controller/ext/foo/config/routing_2.yml
new file mode 100644
index 0000000000..35fff27037
--- /dev/null
+++ b/tests/controller/ext/foo/config/routing_2.yml
@@ -0,0 +1,3 @@
+controller2:
+ pattern: /bar
+ defaults: { _controller: foo.controller:handle }