. * */ namespace OC\AppFramework\DependencyInjection; use OC\AppFramework\Http\Http; use OC\AppFramework\Http\Request; use OC\AppFramework\Http\Dispatcher; use OC\AppFramework\Core\API; use OC\AppFramework\Middleware\MiddlewareDispatcher; use OC\AppFramework\Middleware\Security\SecurityMiddleware; use OC\AppFramework\Utility\TimeFactory; // register 3rdparty autoloaders require_once __DIR__ . '/../../../3rdparty/Pimple/Pimple.php'; /** * This class extends Pimple (http://pimple.sensiolabs.org/) for reusability * To use this class, extend your own container from this. Should you require it * you can overwrite the dependencies with your own classes by simply redefining * a dependency */ class DIContainer extends \Pimple { /** * Put your class dependencies in here * @param string $appName the name of the app */ public function __construct($appName){ $this['AppName'] = $appName; $this['API'] = $this->share(function($c){ return new API($c['AppName']); }); /** * Http */ $this['Request'] = $this->share(function($c) { $params = json_decode(file_get_contents('php://input'), true); $params = is_array($params) ? $params: array(); return new Request( array( 'get' => $_GET, 'post' => $_POST, 'files' => $_FILES, 'server' => $_SERVER, 'env' => $_ENV, 'session' => $_SESSION, 'cookies' => $_COOKIE, 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) ? $_SERVER['REQUEST_METHOD'] : null, 'params' => $params, 'urlParams' => $c['urlParams'] ) ); }); $this['Protocol'] = $this->share(function($c){ if(isset($_SERVER['SERVER_PROTOCOL'])) { return new Http($_SERVER, $_SERVER['SERVER_PROTOCOL']); } else { return new Http($_SERVER); } }); $this['Dispatcher'] = $this->share(function($c) { return new Dispatcher($c['Protocol'], $c['MiddlewareDispatcher']); }); /** * Middleware */ $this['SecurityMiddleware'] = $this->share(function($c){ return new SecurityMiddleware($c['API'], $c['Request']); }); $this['MiddlewareDispatcher'] = $this->share(function($c){ $dispatcher = new MiddlewareDispatcher(); $dispatcher->registerMiddleware($c['SecurityMiddleware']); return $dispatcher; }); /** * Utilities */ $this['TimeFactory'] = $this->share(function($c){ return new TimeFactory(); }); } }