Browse Source

Pass Router parameter to module content method

pull/7822/head
Hypolite Petovan 1 month ago
parent
commit
134d6d18f9

+ 8
- 0
src/App/Module.php View File

@@ -94,6 +94,14 @@ class Module
return $this->module_class;
}

/**
* @return array The module parameters extracted from the route
*/
public function getParameters()
{
return $this->module_parameters;
}

/**
* @return bool True, if the current module is a backend module
* @see Module::BACKEND_MODULES for a list

+ 1
- 1
src/App/Page.php View File

@@ -308,7 +308,7 @@ class Page implements ArrayAccess
$arr = ['content' => $content];
Hook::callAll($moduleClass . '_mod_content', $arr);
$content = $arr['content'];
$arr = ['content' => call_user_func([$moduleClass, 'content'], [])];
$arr = ['content' => call_user_func([$moduleClass, 'content'], $module->getParameters())];
Hook::callAll($moduleClass . '_mod_aftercontent', $arr);
$content .= $arr['content'];
} catch (HTTPException $e) {

+ 12
- 15
src/App/Router.php View File

@@ -65,12 +65,21 @@ class Router
*
* @throws HTTPException\InternalServerErrorException In case of invalid configs
*/
public function addRoutes(array $routes)
public function loadRoutes(array $routes)
{
$routeCollector = (isset($this->routeCollector) ?
$this->routeCollector :
new RouteCollector(new Std(), new GroupCountBased()));

$this->addRoutes($routeCollector, $routes);

$this->routeCollector = $routeCollector;

return $this;
}

private function addRoutes(RouteCollector $routeCollector, array $routes)
{
foreach ($routes as $route => $config) {
if ($this->isGroup($config)) {
$this->addGroup($route, $config, $routeCollector);
@@ -80,10 +89,6 @@ class Router
throw new HTTPException\InternalServerErrorException("Wrong route config for route '" . print_r($route, true) . "'");
}
}

$this->routeCollector = $routeCollector;

return $this;
}

/**
@@ -96,15 +101,7 @@ class Router
private function addGroup(string $groupRoute, array $routes, RouteCollector $routeCollector)
{
$routeCollector->addGroup($groupRoute, function (RouteCollector $routeCollector) use ($routes) {
foreach ($routes as $route => $config) {
if ($this->isGroup($config)) {
$this->addGroup($route, $config, $routeCollector);
} elseif ($this->isRoute($config)) {
$routeCollector->addRoute($config[1], $route, $config[0]);
}else {
throw new HTTPException\InternalServerErrorException("Wrong route config for route '" . print_r($route, true) . "'");
}
}
$this->addRoutes($routeCollector, $routes);
});
}

@@ -174,7 +171,7 @@ class Router

$cmd = '/' . ltrim($cmd, '/');

$dispatcher = new \FastRoute\Dispatcher\GroupCountBased($this->routeCollector->getData());
$dispatcher = new Dispatcher\GroupCountBased($this->routeCollector->getData());

$moduleClass = null;
$this->parameters = [];

+ 1
- 1
static/dependencies.config.php View File

@@ -171,7 +171,7 @@ return [
$_SERVER, null
],
'call' => [
['addRoutes', [include __DIR__ . '/routes.config.php'], Dice::CHAIN_CALL],
['loadRoutes', [include __DIR__ . '/routes.config.php'], Dice::CHAIN_CALL],
],
],
L10n::class => [

+ 1
- 1
tests/src/App/ModuleTest.php View File

@@ -152,7 +152,7 @@ class ModuleTest extends DatabaseTest
$config = \Mockery::mock(Configuration::class);
$config->shouldReceive('get')->with('config', 'private_addons', false)->andReturn($privAdd)->atMost()->once();

$router = (new App\Router([]))->addRoutes(include __DIR__ . '/../../../static/routes.config.php');
$router = (new App\Router([]))->loadRoutes(include __DIR__ . '/../../../static/routes.config.php');

$module = (new App\Module($name))->determineClass(new App\Arguments('', $command), $router, $config);


+ 2
- 2
tests/src/App/RouterTest.php View File

@@ -159,7 +159,7 @@ class RouterTest extends TestCase
{
$router = (new Router([
'REQUEST_METHOD' => Router::GET
]))->addRoutes($routes);
]))->loadRoutes($routes);

$this->assertEquals(Module\Home::class, $router->getModuleClass('/'));
$this->assertEquals(Module\Friendica::class, $router->getModuleClass('/group/route'));
@@ -174,7 +174,7 @@ class RouterTest extends TestCase
{
$router = (new Router([
'REQUEST_METHOD' => Router::POST
]))->addRoutes($routes);
]))->loadRoutes($routes);

// Don't find GET
$this->assertEquals(Module\NodeInfo::class, $router->getModuleClass('/post/it'));

Loading…
Cancel
Save