Allow registering of OCS routes with the appframework

This commit is contained in:
Roeland Jago Douma 2016-05-17 10:11:27 +02:00 committed by Roeland Jago Douma
parent 5157c5a9c4
commit 1ff4b7f63d
No known key found for this signature in database
GPG Key ID: 1E152838F164D13B
1 changed files with 55 additions and 0 deletions

View File

@ -62,6 +62,61 @@ class RouteConfig {
// parse resources
$this->processResources($this->routes);
/*
* OCS routes go into a different collection
*/
$oldCollection = $this->router->getCurrentCollection();
$this->router->useCollection($oldCollection.'.ocs');
// parse ocs simple routes
$this->processOCS($this->routes);
$this->router->useCollection($oldCollection);
}
private function processOCS(array $routes) {
$ocsRoutes = isset($routes['ocs']) ? $routes['ocs'] : [];
foreach ($ocsRoutes as $ocsRoute) {
$name = $ocsRoute['name'];
$postFix = '';
if (isset($ocsRoute['postfix'])) {
$postfix = $ocsRoute['postfix'];
}
$url = $ocsRoute['url'];
$verb = isset($ocsRoute['verb']) ? strtoupper($ocsRoute['verb']) : 'GET';
$split = explode('#', $name, 2);
if (count($split) != 2) {
throw new \UnexpectedValueException('Invalid route name');
}
$controller = $split[0];
$action = $split[1];
$controllerName = $this->buildControllerName($controller);
$actionName = $this->buildActionName($action);
// register the route
$handler = new RouteActionHandler($this->container, $controllerName, $actionName);
$router = $this->router->create('ocs.'.$this->appName.'.'.$controller.'.'.$action . $postfix, $url)
->method($verb)
->action($handler);
// optionally register requirements for route. This is used to
// tell the route parser how url parameters should be matched
if(array_key_exists('requirements', $ocsRoute)) {
$router->requirements($ocsRoute['requirements']);
}
// optionally register defaults for route. This is used to
// tell the route parser how url parameters should be default valued
if(array_key_exists('defaults', $ocsRoute)) {
$router->defaults($ocsRoute['defaults']);
}
}
}
/**