Esempio n. 1
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function fire()
 {
     $rows = [];
     $real_progress = 0;
     $idx = 0;
     $last = null;
     $items = [];
     foreach (\Route::getRoutes() as $r => $route) {
         //            if (!\Larakit\Route\Route::isEnable($route->getName())) {
         //                continue;
         //            }
         /**
          * @var Route $route
          */
         $item = [];
         $action = $route->getActionName();
         $_action = explode('@', $action);
         $method = Arr::get($_action, 1);
         $class = Arr::get($_action, 0);
         //            if (($action != 'Closure') && (strpos($action, 'Larakit') === false))
         //                continue;
         if ('Closure' == $action) {
             $progress = 100;
         } else {
             if (is_callable(explode('@', $action))) {
                 $readiness = (int) \Larakit\Route\Route::_($route->getName(), 'readiness');
                 if (!$readiness) {
                     $readiness = 1;
                 }
                 $progress = $readiness;
             } else {
                 $progress = 0;
             }
         }
         $idx++;
         $real_progress += $progress;
         switch (true) {
             case $progress < 50:
                 $style = 'error';
                 break;
             case $progress < 100:
                 $style = 'question';
                 break;
             default:
                 $style = 'info';
                 break;
         }
         $item[] = $this->wrap($route->domain(), $style);
         $item[] = $this->wrap(implode('|', $route->getMethods()), $style);
         $item[] = $this->wrap($route->getUri(), $style);
         $item[] = $this->wrap($route->getName(), $style);
         if ('Closure' == $action) {
             $item[] = $this->wrap('\\Closure', $style);
             $item[] = '';
         } else {
             $item[] = $this->wrap($class, $style);
             $item[] = $this->wrap($method, $style);
         }
         $item[] = $this->wrap($idx, $style, 3);
         $item[] = $this->wrap($progress . '%', $style, 9);
         $v = mb_strpos($route->getName(), '::') ? explode('::', $route->getName()) : [];
         $vendor = Arr::get($v, 0, 'app');
         //            $item[]      = $vendor;
         if ($last != $vendor) {
             if (!is_null($last)) {
                 $rows[] = new TableSeparator();
             }
             $last = $vendor;
         }
         $items[$route->getName()] = $item;
     }
     $last = null;
     $rows = [];
     $idx = 0;
     foreach ($items as $route => $row) {
         $idx++;
         $v = mb_strpos($route, '::') ? explode('::', $route) : [];
         $vendor = Arr::get($v, 0, 'app');
         if ($last != $vendor) {
             if (!is_null($last)) {
                 $rows[] = new TableSeparator();
             }
             $last = $vendor;
         }
         $rows[] = [$idx] + $row;
     }
     //        foreach($)
     $this->table(['Domain', 'Method', 'URI', 'RouteName', 'Controller', 'Action', '#', 'Readiness'], $rows);
     $progress_all = count($rows) * 100;
     $real_progress = $real_progress / $progress_all * 100;
     $this->info('Общая готовность: ' . number_format($real_progress, 2) . '%');
     $this->info('[' . str_pad(str_repeat('#', (int) $real_progress) . ($real_progress != 100 ? '>' : ''), 100, '-', STR_PAD_RIGHT) . ']');
 }