コード例 #1
0
ファイル: HandlerManager.php プロジェクト: szyhf/DIServer
 /**
  * @param \DIServer\Interfaces\IHandler $handler
  *
  * @return \Closure
  */
 private function _createPipeClosure(\DIServer\Interfaces\IHandler $handler)
 {
     $pipeline = new Pipeline();
     $middlewareClasses = $handler->GetMiddlewares();
     $middlewareHandlers = [];
     foreach ($middlewareClasses as $middlewareClass) {
         $refClass = new \ReflectionClass($middlewareClass);
         if (!$refClass->isSubclassOf(IMiddleware::class)) {
             Log::Warning("Try to load {$middlewareClass} in " . get_class($handler) . " but is not instance of IMiddleware");
             continue;
         }
         $middlewareHandlers[] = Container::BuildWithClass($middlewareClass);
     }
     return $pipeline->Through($middlewareHandlers)->Prepared(function ($request) use($handler) {
         //最后一层封装为Handler的默认Handle方法
         return Container::CallMethod($handler, 'Handle', ['request' => $request]);
     });
 }
コード例 #2
0
ファイル: Base.php プロジェクト: szyhf/DIServer
 /**
  * 触发事件
  *
  * @param string $tag    标签名
  * @param mixed  $params 以引用方式传递于此标签行为的参数数组
  */
 public function Listen($tag, &$params = [])
 {
     if (isset($this->events[$tag])) {
         $startTime = microtime(true);
         foreach ($this->events[$tag] as $event) {
             $res = call_user_func_array($event, $params);
             if ($res === false) {
                 break;
                 //中断执行
             }
         }
         $endTime = microtime(true);
         $costTime = $startTime - $endTime;
         if ($costTime >= 1000) {
             Log::Warning("Call {$tag} event cost {$costTime}ms.");
         }
     }
 }
コード例 #3
0
ファイル: Application.php プロジェクト: szyhf/DIServer
 public function AutoBuildCollection($registryFile, $iface = '')
 {
     $files = $this->GetConventionPaths("/Registry/{$registryFile}");
     if ($this->isAbstract($iface)) {
         $check = function (string $class) use($iface) {
             if (class_exists($class)) {
                 $refClass = new \ReflectionClass($class);
                 if ($refClass->isSubclassOf($iface)) {
                     return true;
                 } else {
                     Log::Warning("Try to auto-build {$class}, but class isn't instance of {$iface}.");
                 }
             } else {
                 Log::Warning("Try to auto-build {$class}, but class not exist.");
             }
             return false;
         };
     } else {
         $check = function (string $class) {
             if (class_exists($class)) {
                 return true;
             } else {
                 Log::Warning("Try to auto-build {$class}, but class not exist.");
             }
             //没有传入iface就不检查默认true
             return false;
         };
     }
     $newClasses = [];
     foreach ($files as $file) {
         if (file_exists($file)) {
             $tempClass = (include $file);
             Ary::MergeRecursive($newClasses, $tempClass);
         }
     }
     $newInstances = [];
     foreach ($newClasses as $key => $newClass) {
         if (is_array($newClass)) {
             foreach ($newClass as $tempClass) {
                 if ($check($newClass)) {
                     $newInstances[$key][] = $this->BuildWithClass($newClass);
                 }
             }
         } else {
             if ($check($newClass)) {
                 $newInstances[$key] = $this->BuildWithClass($newClass);
             }
         }
     }
     return $newInstances;
 }