mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
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:
commit
a7e41b23fd
5 changed files with 30 additions and 17 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
3
tests/controller/ext/foo/config/routing_2.yml
Normal file
3
tests/controller/ext/foo/config/routing_2.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
controller2:
|
||||||
|
pattern: /bar
|
||||||
|
defaults: { _controller: foo.controller:handle }
|
Loading…
Add table
Reference in a new issue