Merge pull request #21643 from nextcloud/enh/no_routeactionhadler_inits
Do not create a RouteActionHandler object for each route
This commit is contained in:
commit
7a92113fec
|
@ -140,12 +140,9 @@ class RouteConfig {
|
|||
|
||||
$routeName = $routeNamePrefix . $this->appName . '.' . $controller . '.' . $action . $postfix;
|
||||
|
||||
// register the route
|
||||
$handler = new RouteActionHandler($this->container, $controllerName, $actionName);
|
||||
|
||||
$router = $this->router->create($routeName, $url)
|
||||
->method($verb)
|
||||
->action($handler);
|
||||
->setDefault('caller', [$this->appName, $controllerName, $actionName]);
|
||||
|
||||
// optionally register requirements for route. This is used to
|
||||
// tell the route parser how url parameters should be matched
|
||||
|
@ -233,9 +230,9 @@ class RouteConfig {
|
|||
|
||||
$routeName = $routeNamePrefix . $this->appName . '.' . strtolower($resource) . '.' . strtolower($method);
|
||||
|
||||
$this->router->create($routeName, $url)->method($verb)->action(
|
||||
new RouteActionHandler($this->container, $controllerName, $actionName)
|
||||
);
|
||||
$this->router->create($routeName, $url)
|
||||
->method($verb)
|
||||
->setDefault('caller', [$this->appName, $controllerName, $actionName]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -288,7 +288,12 @@ class Router implements IRouter {
|
|||
}
|
||||
|
||||
\OC::$server->getEventLogger()->start('run_route', 'Run route');
|
||||
if (isset($parameters['action'])) {
|
||||
if (isset($parameters['caller'])) {
|
||||
$caller = $parameters['caller'];
|
||||
unset($parameters['caller']);
|
||||
$application = $this->getApplicationClass($caller[0]);
|
||||
\OC\AppFramework\App::main($caller[1], $caller[2], $application->getContainer(), $parameters);
|
||||
} elseif (isset($parameters['action'])) {
|
||||
$action = $parameters['action'];
|
||||
if (!is_callable($action)) {
|
||||
throw new \Exception('not a callable action');
|
||||
|
@ -394,17 +399,22 @@ class Router implements IRouter {
|
|||
*/
|
||||
private function setupRoutes($routes, $appName) {
|
||||
if (is_array($routes)) {
|
||||
$appNameSpace = App::buildAppNamespace($appName);
|
||||
|
||||
$applicationClassName = $appNameSpace . '\\AppInfo\\Application';
|
||||
|
||||
if (class_exists($applicationClassName)) {
|
||||
$application = \OC::$server->query($applicationClassName);
|
||||
} else {
|
||||
$application = new App($appName);
|
||||
}
|
||||
|
||||
$application = $this->getApplicationClass($appName);
|
||||
$application->registerRoutes($this, $routes);
|
||||
}
|
||||
}
|
||||
|
||||
private function getApplicationClass(string $appName) {
|
||||
$appNameSpace = App::buildAppNamespace($appName);
|
||||
|
||||
$applicationClassName = $appNameSpace . '\\AppInfo\\Application';
|
||||
|
||||
if (class_exists($applicationClassName)) {
|
||||
$application = \OC::$server->query($applicationClassName);
|
||||
} else {
|
||||
$application = new App($appName);
|
||||
}
|
||||
|
||||
return $application;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
namespace Test\AppFramework\Routing;
|
||||
|
||||
use OC\AppFramework\DependencyInjection\DIContainer;
|
||||
use OC\AppFramework\Routing\RouteActionHandler;
|
||||
use OC\AppFramework\Routing\RouteConfig;
|
||||
use OC\Route\Route;
|
||||
use OC\Route\Router;
|
||||
|
@ -420,7 +419,7 @@ class RoutingTest extends \Test\TestCase {
|
|||
array $defaults=[]
|
||||
) {
|
||||
$route = $this->getMockBuilder(Route::class)
|
||||
->onlyMethods(['method', 'action', 'requirements', 'defaults'])
|
||||
->onlyMethods(['method', 'setDefault', 'requirements', 'defaults'])
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$route
|
||||
|
@ -431,8 +430,8 @@ class RoutingTest extends \Test\TestCase {
|
|||
|
||||
$route
|
||||
->expects($this->once())
|
||||
->method('action')
|
||||
->with($this->equalTo(new RouteActionHandler($container, $controllerName, $actionName)))
|
||||
->method('setDefault')
|
||||
->with('caller', ['app1', $controllerName, $actionName])
|
||||
->willReturn($route);
|
||||
|
||||
if (count($requirements) > 0) {
|
||||
|
|
Loading…
Reference in New Issue