Example #1
0
<?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']);
        }
Example #2
0
 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>');
 }