Example #1
0
 /**
  * 设置路由
  *
  * @param array $router
  */
 public static function set(array $router)
 {
     if (self::$modules_status == 0) {
         self::$modules_status = 1;
     }
     if (Base::hasMatched()) {
         return;
     }
     // 匹配前缀
     $prefix = strval(array_get($router, 'prefix', ''));
     if ($prefix === "") {
         $prefix = self::$prefix;
     }
     if ($prefix !== Base::getPrefix()) {
         return;
     }
     // 匹配控制器
     $controllers = array_get($router, 'controllers', []);
     if (!is_array($controllers) || empty($controllers)) {
         throw new \InvalidArgumentException("路由配置有误,'controllers'的值必须是非空数组");
     }
     $controller = strval(array_get($controllers, Base::getController(), ''));
     if (empty($controller)) {
         return;
     }
     // 处理命名空间
     $namespace = strval(array_get($router, 'namespace', ''));
     self::handleConfigNamespace($namespace, $prefix);
     // 获取中间件,延迟处理 - 需要先加载其他模块才能处理中间件
     $middleware = array_get($router, 'middlewares', []);
     Http\Middleware\QpMiddleware::handleConfigMiddleware($middleware, $namespace);
     Base::saveRouterData(['namespace' => $namespace, 'controller' => $controller, 'middleware' => $middleware]);
     Base::match();
 }
Example #2
0
 /**
  * 处理用户请求的路由
  * 匹配失败直接抛出异常,成功则返回设置过的Phalcon路由对象
  *
  * @return  \Phalcon\Mvc\Router     Phalcon的路由对象
  * @throws  \ErrorException
  */
 private function handleRouter()
 {
     require_once QP_APP_PATH . "routers.php";
     if (QR::hasMatched() == false) {
         echo (new \App\Controllers\IndexController())->notFoundAction();
         exit;
     }
     $matched_router_data = QR::getMatchedData();
     $ns = $matched_router_data['namespace'];
     $ctrl = $matched_router_data['controller'];
     $m = QR::getMethod();
     if (!method_exists($ns . "\\" . $ctrl . "Controller", $m . "Action")) {
         echo (new \App\Controllers\IndexController())->notFoundAction();
         exit;
     }
     $router = new \Phalcon\Mvc\Router();
     $router->setDefaults(["namespace" => $ns, "controller" => $ctrl, "action" => $m]);
     return $router;
 }