diff options
author | Nils Adermann <naderman@naderman.de> | 2013-10-22 00:29:20 -0700 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2013-10-22 00:29:20 -0700 |
commit | a7e41b23fd7e7f39b1e37796eca618a59e0cb9be (patch) | |
tree | f6f1ab691dce3e59204271a7e4c4463f406ac27d | |
parent | ba5b53521a186dc23d6d4b849c7f76196c783d43 (diff) | |
parent | 96317b2c4518976c683dd67f38a8a6f8faabdf15 (diff) | |
download | forums-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.php | 8 | ||||
-rw-r--r-- | phpBB/phpbb/controller/provider.php | 21 | ||||
-rw-r--r-- | tests/controller/controller_test.php | 11 | ||||
-rw-r--r-- | tests/controller/ext/foo/config/routing.yml | 4 | ||||
-rw-r--r-- | tests/controller/ext/foo/config/routing_2.yml | 3 |
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 } |