Example #1
0
 public static function init($options = [])
 {
     static $noinit = true;
     if ($noinit) {
         // 载入 框架默认值
         $config = new Config(require __DIR__ . '/__defaults.php');
         $config->import($options);
         $timezone = $config->get('app.timezone', 'Asia/Chongqing');
         date_default_timezone_set($timezone);
         $config->set('app.runtime_id', Runtime::instance()->id());
         if (!Env::is('cli')) {
             $session = $config->get('app.session_autostart', true);
             if ($session) {
                 session_start();
             }
             header("Content-Type: text/html;charset=utf-8");
         }
         self::$config = $config;
         $noinit = false;
     }
 }
Example #2
0
 /**
  * 解析请求并挂载到指定应用
  * 
  * @param  Request $request
  * 
  * @return \Ws\Mvc\App
  */
 private static function parseMointpoints(Request $request)
 {
     static $firstIs = true;
     $pathinfo = $request->pathinfo();
     \Ws\Debug\Tracks::instance()->track('sys:init', $pathinfo);
     $mounts = (array) self::$config->get('app.mounts');
     if ($firstIs) {
         // 格式化 $mounts
         foreach ($mounts as $appId => $options) {
             if (is_dir($options['dir'])) {
                 $options['dir'] = rtrim($options['dir'], '\\/');
                 $options['mount'] = rtrim($options['mount'], '\\/') . '/';
                 $options['len'] = strlen($options['mount']);
                 $mounts[$appId] = $options;
             } else {
                 unset($mounts[$appId]);
             }
         }
         $mounts = Arrays::sort_by_col($mounts, 'len', SORT_DESC);
         self::$config->set('app.mounts', $mounts);
         $firstIs = false;
     }
     $app = null;
     // 定位挂载点
     foreach ($mounts as $appId => $options) {
         $pa = $pathinfo;
         $idstr = '/^' . str_replace('/', '\\/', $options['mount']) . '/i';
         // 匹配pathinfo /a => /a/ 的区别
         if ($options['mount'] == "{$pa}/") {
             $pa = "{$pa}/";
         }
         if (preg_match($idstr, $pa)) {
             $app = self::loadApp($appId, $options);
             if (!empty($app)) {
                 $pathing = preg_replace($idstr, '', $pa);
                 $app->setPathing($pathing);
             }
             break;
         }
     }
     return $app;
 }
Example #3
0
 /**
  * 生成 接口 模式的访问路径
  * 
  * @param  string $cmdId    命令标识
  * @param  array  $params   参数
  * 
  * @return string
  */
 public function jsonPathing($cmdId, $params = [])
 {
     $url = rtrim(Request::get_request_baseuri(), '\\/') . $this->config->get('app.mount');
     $url .= Cmd::build($cmdId, $params, Cmd::JSON);
     return $url;
 }