Allow registering of OCS routes with the appframework
This commit is contained in:
parent
5157c5a9c4
commit
1ff4b7f63d
1 changed files with 55 additions and 0 deletions
|
@ -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']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue