Example #1
0
 /**
  * CLI 模式下的 DI 配置
  *
  * @param CLI $di
  */
 protected function cliDI(CLI $di)
 {
     global $argv;
     $di->set('router', function () use($di, $argv) {
         $router = new CLIRouter();
         $router->setDI($di);
         return $router;
     });
     $di->set('output', function () {
         return new ConsoleOutput();
     });
     $di->set('dispatcher', function () use($di, $argv) {
         $dispatcher = new CLIDispatcher();
         $dispatcher->setDI($di);
         $moduleName = array_shift($argv);
         $taskName = array_shift($argv);
         $actionName = 'main';
         if (strpos($taskName, ':') > 0) {
             @(list($taskName, $actionName) = preg_split("/:/", $taskName));
         }
         if ($moduleName) {
             $dispatcher->setTaskName(ucwords($taskName));
             $dispatcher->setActionName($actionName);
             $dispatcher->setParams($argv);
             if ($moduleName == '_current') {
                 $_appName = ucwords($this->getAppName());
                 $dispatcher->setNamespaceName("{$_appName}\\Tasks");
             } else {
                 $dispatcher->setNamespaceName("Eva\\{$moduleName}\\Tasks");
             }
         } else {
             $dispatcher->setTaskName('Main');
             $dispatcher->setParams($argv);
             $dispatcher->setNamespaceName("Eva\\EvaEngine\\Tasks");
         }
         return $dispatcher;
     });
 }