Example #1
0
 /**
  * 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);
 }
Example #2
0
 /**
  * @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);
     }
 }