public function testDispatcher() { $this->specify("CLI Dispatcher doesn't work with typical parameters", function () { $di = new CliFactoryDefault(); $di->set('data', function () { return "data"; }); $dispatcher = new Dispatcher(); $dispatcher->setDI($di); $dispatcher->dispatch(); expect($dispatcher->getTaskName())->equals('main'); expect($dispatcher->getActionName())->equals('main'); expect($dispatcher->getParams())->equals([]); expect($dispatcher->getReturnedValue())->equals('mainAction'); $dispatcher->setTaskName('echo'); $dispatcher->dispatch(); expect($dispatcher->getTaskName())->equals('echo'); expect($dispatcher->getActionName())->equals('main'); expect($dispatcher->getParams())->equals([]); expect($dispatcher->getReturnedValue())->equals('echoMainAction'); $dispatcher->setTaskName('main'); $dispatcher->setActionName('hello'); $dispatcher->dispatch(); expect($dispatcher->getTaskName())->equals('main'); expect($dispatcher->getActionName())->equals('hello'); expect($dispatcher->getParams())->equals([]); expect($dispatcher->getReturnedValue())->equals('Hello !'); $dispatcher->setActionName('hello'); $dispatcher->setParams(array('World', '######')); $dispatcher->dispatch(); expect($dispatcher->getTaskName())->equals('main'); expect($dispatcher->getActionName())->equals('hello'); expect($dispatcher->getParams())->equals(array('World', '######')); expect($dispatcher->getReturnedValue())->equals('Hello World######'); $dispatcher->setActionName('hello'); $dispatcher->setParams(array('hello' => 'World', 'goodbye' => 'Everybody')); $dispatcher->dispatch(); expect($dispatcher->hasParam('hello'))->true(); expect($dispatcher->hasParam('goodbye'))->true(); expect($dispatcher->hasParam('salutations'))->false(); // testing namespace try { $dispatcher->setDefaultNamespace('Dummy\\'); $dispatcher->setTaskName('main'); $dispatcher->setActionName('hello'); $dispatcher->setParams(array('World')); $dispatcher->dispatch(); expect($dispatcher->getTaskName())->equals('main'); expect($dispatcher->getActionName())->equals('hello'); expect($dispatcher->getParams())->equals(array('World')); expect($dispatcher->getReturnedValue())->equals('Hello World!'); } catch (\Exception $e) { expect($e->getMessage())->equals('Dummy\\MainTask handler class cannot be loaded'); } }); }
/** * 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; }); }