/** * 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); }
/** * @internal */ public function __construct($userSettings = null) { $configDir = '.'; // Пользовательские настройки // -------------------------- if (!is_array($userSettings)) { $userSettings = array('file' => $userSettings); } if ($file = @$userSettings['file']) { unset($userSettings['file']); if (file_exists($file)) { $configDir = dirname($file); $settings = Utils::loadConfig($file); Log::debug("Configuration load: " . realpath($file)); unset($file); $userSettings = array_merge($userSettings, $settings); } } $userSettings = array_merge($this->defaultsSettings, $userSettings); if ($p = $userSettings['templates.path']) { if (substr($p, 0, 1) !== '/') { $userSettings['templates.path'] = SYSPATH . '/' . $p; } } // if (is_array($userSettings['import'])) { // $import = $userSettings['import']; // foreach ($import as $file) { // $file = $configDir . '/' . $file; // $settings = Utils::loadConfig($file); // if ($settings) { // $defaultSettings = array_merge($defaultSettings, $settings); // Log::debug("Configuration import", // array(realpath($file))); // } // } // } parent::__construct((array) $userSettings); $app =& $this; // Если Internet Explorer, то шлем на хуй /* if (preg_match('/(rv:11.0|MSIE)/i', $_SERVER['HTTP_USER_AGENT'])) { $app->log->warning('Bad Browser ', array('HTTP_USER_AGENT'=>$_SERVER['HTTP_USER_AGENT'])); $app->redirect( "http://fobia.github.io/docs/badbrowser.html" ); exit(); } */ // // Автоматическая загрузка секций конфигурации // ---------------------------------------------- $autoload = $this['settings']['app.autoload']; if ($autoload) { $this['settings']['app'] = new \Pimple(); $this['settings']['app']['autoload'] = $autoload; if (is_array($autoload)) { foreach (@$autoload as $cfg => $file) { $this['settings']['app'][$cfg] = function ($c) use($cfg, $file, $configDir) { Log::debug(">> autoload config", array($cfg, $file)); if (!file_exists($configDir . "/{$file}")) { trigger_error("Нет автозагрузочной секции конфигурации '{$cfg}'" . "/{$file}", E_USER_ERROR); return; } return Utils::loadConfig($file); }; } } } unset($autoload, $cfg, $file); // Session // session.gc_maxlifetime = 1440 // ;setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): // ------------------ $this['session'] = function ($c) { $sid = null; if ($c['settings']['session.cookie'] && @$_COOKIE['SID']) { $sid = $_COOKIE['SID']; session_id($sid); } $session = new \Slim\Session($c['settings']['session.handler']); @$session->start(); if ($c['settings']['session.encrypt'] === true) { $session->decrypt($c['crypt']); } if ($sid === null) { $sid = session_id(); if ($c['settings']['session.cookie']) { @$c->setCookie('SID', $sid, time() + 1440); Log::debug('Session save cookie'); } } Log::debug('Session start', array($sid)); return $session; }; // View // ------------------ $this['view'] = function ($c) { $view = $c['settings']['view']; if ($view instanceof \Slim\Interfaces\ViewInterface !== false) { return $view; } $view = new \Slim\Views\Smarty($c['settings']['templates.path']); $view->parserExtensions = SRC_DIR . '/src/Slim/Views/SmartyPlugins'; $view->parserCompileDirectory = CACHE_DIR . '/templates'; $view->parserCacheDirectory = CACHE_DIR; return $view; }; // Database // ------------------ $this['db'] = function ($c) { $db = \Fobia\DataBase\DbFactory::create($c['settings']['database']); \ezcDbInstance::set($db); return $db; }; // Auth // ------------------ $this['auth'] = function ($c) use($app) { $auth = new \Fobia\Auth\Authentication($app); $auth->authenticate(); return $auth; }; // API // ------------------ // $this['apiHandler'] = function() { // return new \Api\ApiHandler(); // }; // $this['api'] = $this->protect(function($method, $params = null) use ($app) { // $result = $app['apiHandler']->request($method, $params); // return $result; // }); // ------------------ if (!self::$instance[0]) { self::setInstance($this); } }