/** * 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; }); }