/** * Constructor * @param array $userSettings Associative array of application settings * @api */ public function __construct(array $userSettings = array()) { parent::__construct(); // Settings $this['settings'] = function ($c) use($userSettings) { $config = new \Slim\Configuration(new \Slim\ConfigurationHandler()); $config->setArray($userSettings); return $config; }; // Environment $this['environment'] = function ($c) { return new \Slim\Environment($_SERVER); }; // Request $this['request'] = function ($c) { $environment = $c['environment']; $headers = new \Slim\Http\Headers($environment); $cookies = new \Slim\Http\Cookies($headers); if ($c['settings']['cookies.encrypt'] === true) { $cookies->decrypt($c['crypt']); } return new \Slim\Http\Request($environment, $headers, $cookies); }; // Response $this['response'] = function ($c) { $headers = new \Slim\Http\Headers(); $cookies = new \Slim\Http\Cookies(); $response = new \Slim\Http\Response($headers, $cookies); $response->setProtocolVersion('HTTP/' . $c['settings']['http.version']); return $response; }; // Router $this['router'] = function ($c) { return new \Slim\Router(); }; // View $this['view'] = function ($c) { $view = $c['settings']['view']; if ($view instanceof \Slim\Interfaces\ViewInterface === false) { throw new \Exception('View class must be instance of \\Slim\\View'); } return $view; }; // Crypt $this['crypt'] = function ($c) { return new \Slim\Crypt($c['settings']['crypt.key'], $c['settings']['crypt.cipher'], $c['settings']['crypt.mode']); }; // Session $this['session'] = function ($c) { $session = new \Slim\Session($c['settings']['session.handler']); $session->start(); if ($c['settings']['session.encrypt'] === true) { $session->decrypt($c['crypt']); } return $session; }; // Flash $this['flash'] = function ($c) { $flash = new \Slim\Flash($c['session'], $c['settings']['session.flash_key']); if ($c['settings']['view'] instanceof \Slim\Interfaces\ViewInterface) { $c['view']->set('flash', $flash); } return $flash; }; // Mode $this['mode'] = function ($c) { $mode = $c['settings']['mode']; if (isset($_ENV['SLIM_MODE'])) { $mode = $_ENV['SLIM_MODE']; } else { $envMode = getenv('SLIM_MODE'); if ($envMode !== false) { $mode = $envMode; } } return $mode; }; // Middleware stack $this['middleware'] = array($this); }