Merge pull request #1801 from nickvergessen/ticket/11948

Ticket/11948 Extensions should be allowed to have more then 1 routing file
This commit is contained in:
Nils Adermann 2013-10-22 00:29:20 -07:00
commit a7e41b23fd
5 changed files with 30 additions and 17 deletions

View file

@ -32,7 +32,7 @@ function phpbb_get_url_matcher(\phpbb\extension\finder $finder, RequestContext $
{ {
if (defined('DEBUG')) 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)) 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) function phpbb_create_dumped_url_matcher(\phpbb\extension\finder $finder, $root_path, $php_ext)
{ {
$provider = new \phpbb\controller\provider(); $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); $dumper = new PhpMatcherDumper($routes);
$cached_url_matcher_dump = $dumper->dump(array( $cached_url_matcher_dump = $dumper->dump(array(
'class' => 'phpbb_url_matcher', '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 * @param RequestContext $context Symfony RequestContext object
* @return UrlMatcher * @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(); $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); return new UrlMatcher($routes, $context);
} }

View file

@ -31,17 +31,17 @@ class provider
* YAML file(s) containing route information * YAML file(s) containing route information
* @var array * @var array
*/ */
protected $routing_paths; protected $routing_files;
/** /**
* Construct method * 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 * 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 // We hardcode the path to the core config directory
// because the finder cannot find it // 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') ->directory('config')
->prefix('routing') ->suffix('routing.yml')
->suffix('yml')
->find() ->find()
))); ));
return $this; return $this;
} }
@ -73,10 +72,10 @@ class provider
public function find($base_path = '') public function find($base_path = '')
{ {
$routes = new RouteCollection; $routes = new RouteCollection;
foreach ($this->routing_paths as $path) foreach ($this->routing_files as $file_path)
{ {
$loader = new YamlFileLoader(new FileLocator($base_path . $path)); $loader = new YamlFileLoader(new FileLocator($base_path));
$routes->addCollection($loader->load('routing.yml')); $routes->addCollection($loader->load($file_path));
} }
return $routes; return $routes;

View file

@ -34,10 +34,17 @@ class phpbb_controller_controller_test extends phpbb_test_case
$provider = new \phpbb\controller\provider; $provider = new \phpbb\controller\provider;
$routes = $provider $routes = $provider
->import_paths_from_finder($this->extension_manager->get_finder()) ->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 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() public function test_controller_resolver()

View file

@ -1,3 +1,7 @@
controller1: controller1:
pattern: /foo pattern: /foo
defaults: { _controller: foo.controller:handle } defaults: { _controller: foo.controller:handle }
include_controller2:
resource: "routing_2.yml"
prefix: /foo

View file

@ -0,0 +1,3 @@
controller2:
pattern: /bar
defaults: { _controller: foo.controller:handle }