<?php /** * service.php. * Author: yeweijian * E-mail: yeweijian@hoolai.com * Date: 2016/1/22 * Time: 12:16 */ $di = EasyWork\DI::factory(); $di->setShare('config', function () { return EasyWork\Loader::import(APP_CONF_PATH . '/config.php'); }); $di->setShare('view', function () { $view = new \EasyWork\View(); $module = \EasyWork\Router::getModule(); $view->setViewDir(ROOT_PATH . '/app/' . $module . '/View'); return $view; }); $di->setShare('response', function () { return new \EasyWork\Response(); }); $di->setShare('request', function () { $dispatcher = EasyWork\Router::simpleDispatcher(function (EasyWork\Router\RouteCollector $r) { $routes = EasyWork\Loader::import(APP_CONF_PATH . '/router.php'); foreach ($routes as $route) { if (empty($route['method']) || empty($route['uri']) || empty($route['handle'])) { continue; } $r->addRoute($route['method'], $route['uri'], $route['handle']); }
private function _dispatcher($routeInfo) { $_handler = ['module' => 'Home', 'controller' => 'Index', 'action' => 'index']; $handler = $routeInfo['r_handle']; $type = gettype($handler); switch ($type) { case 'string': if (false != strpos($handler, '@')) { list($_handler['module'], $handler) = explode('@', $handler); } if (false != strpos($handler, '_')) { list($_handler['controller'], $_handler['action']) = explode('_', $handler); } elseif (false != strpos($handler, '/')) { list($_handler['controller'], $_handler['action']) = explode('/', $handler); } break; case 'array': $_handler = array_merge($_handler, $handler); break; case 'object': if ($handler instanceof \Closure) { $this->_response->end(call_user_func($handler)); return; } } empty($_handler['namespace']) || Router::setModule(ucfirst($_handler['namespace'])); empty($_handler['module']) || Router::setModule(ucfirst($_handler['module'])); empty($_handler['controller']) || Router::setController(ucfirst($_handler['controller'])); empty($_handler['action']) || Router::setAction($_handler['action']); $controller = Router::getNamespace() . '\\' . Router::getModule() . '\\' . Router::getControllerSuffix() . '\\' . Router::getController() . Router::getControllerSuffix(); $action = Router::getAction() . Router::getActionSuffix(); /** * @var Controller $obj ; */ $obj = new $controller($routeInfo['request'], $this->_response); $rel = new \ReflectionClass($obj->setDI($this->_di)); if ($rel->hasMethod($action)) { $method = $rel->getMethod($action); if ($method->isPublic() && !$method->isStatic()) { if ($scheduler = $this->_di->get('scheduler')) { if ($method->getNumberOfParameters() > 0) { $result = $method->invokeArgs($obj, $routeInfo['r_var']); } else { $result = $method->invoke($obj); } $scheduler->newTask($result)->run(); return; } } } $this->_response->getSwResponse()->status(404); $this->_response->getSwResponse()->end('<h1>404</h1>'); }