diff options
author | Roeland Jago Douma <rullzer@owncloud.com> | 2016-05-06 20:38:34 +0200 |
---|---|---|
committer | Roeland Jago Douma <rullzer@owncloud.com> | 2016-05-06 20:38:34 +0200 |
commit | e47b186d5117b56eb73a9d6c6f95d4d78ddd6084 (patch) | |
tree | ce9a2b4feb3a3e77b4849eba768a22ba0d8ba924 /lib/public/AppFramework/App.php | |
parent | 09c507246d6795eb389c2b97af5db0200800637e (diff) | |
download | nextcloud-server-e47b186d5117b56eb73a9d6c6f95d4d78ddd6084.tar.gz nextcloud-server-e47b186d5117b56eb73a9d6c6f95d4d78ddd6084.zip |
Move \OCP\AppFramework to PSR-4
Diffstat (limited to 'lib/public/AppFramework/App.php')
-rw-r--r-- | lib/public/AppFramework/App.php | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/lib/public/AppFramework/App.php b/lib/public/AppFramework/App.php new file mode 100644 index 00000000000..e5069150765 --- /dev/null +++ b/lib/public/AppFramework/App.php @@ -0,0 +1,136 @@ +<?php +/** + * @author Bernhard Posselt <dev@bernhard-posselt.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Thomas Tanghus <thomas@tanghus.net> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +/** + * Public interface of ownCloud for apps to use. + * AppFramework/App class + */ + +namespace OCP\AppFramework; +use OC\AppFramework\Routing\RouteConfig; + + +/** + * Class App + * @package OCP\AppFramework + * + * Any application must inherit this call - all controller instances to be used are + * to be registered using IContainer::registerService + * @since 6.0.0 + */ +class App { + + + /** + * Turns an app id into a namespace by convetion. The id is split at the + * underscores, all parts are camelcased and reassembled. e.g.: + * some_app_id -> OCA\SomeAppId + * @param string $appId the app id + * @param string $topNamespace the namespace which should be prepended to + * the transformed app id, defaults to OCA\ + * @return string the starting namespace for the app + * @since 8.0.0 + */ + public static function buildAppNamespace($appId, $topNamespace='OCA\\') { + return \OC\AppFramework\App::buildAppNamespace($appId, $topNamespace); + } + + + /** + * @param array $urlParams an array with variables extracted from the routes + * @since 6.0.0 + */ + public function __construct($appName, $urlParams = array()) { + $this->container = new \OC\AppFramework\DependencyInjection\DIContainer($appName, $urlParams); + } + + private $container; + + /** + * @return IAppContainer + * @since 6.0.0 + */ + public function getContainer() { + return $this->container; + } + + /** + * This function is to be called to create single routes and restful routes based on the given $routes array. + * + * Example code in routes.php of tasks app (it will register two restful resources): + * $routes = array( + * 'resources' => array( + * 'lists' => array('url' => '/tasklists'), + * 'tasks' => array('url' => '/tasklists/{listId}/tasks') + * ) + * ); + * + * $a = new TasksApp(); + * $a->registerRoutes($this, $routes); + * + * @param \OCP\Route\IRouter $router + * @param array $routes + * @since 6.0.0 + */ + public function registerRoutes($router, $routes) { + $routeConfig = new RouteConfig($this->container, $router, $routes); + $routeConfig->register(); + } + + /** + * This function is called by the routing component to fire up the frameworks dispatch mechanism. + * + * Example code in routes.php of the task app: + * $this->create('tasks_index', '/')->get()->action( + * function($params){ + * $app = new TaskApp($params); + * $app->dispatch('PageController', 'index'); + * } + * ); + * + * + * Example for for TaskApp implementation: + * class TaskApp extends \OCP\AppFramework\App { + * + * public function __construct($params){ + * parent::__construct('tasks', $params); + * + * $this->getContainer()->registerService('PageController', function(IAppContainer $c){ + * $a = $c->query('API'); + * $r = $c->query('Request'); + * return new PageController($a, $r); + * }); + * } + * } + * + * @param string $controllerName the name of the controller under which it is + * stored in the DI container + * @param string $methodName the method that you want to call + * @since 6.0.0 + */ + public function dispatch($controllerName, $methodName) { + \OC\AppFramework\App::main($controllerName, $methodName, $this->container); + } +} |