for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace nebula\application;
use nebula\NebulaApplication;
use nebula\application\Request;
use nebula\application\module\Manager;
use nebula\component\route\RouteMatcher;
use nebula\application\route\GroupRoutes;
use nebula\application\route\MatchResult;
/**
* 应用
*
*/
class Route
{
* 路由集合
* @var GroupRoutes[]
protected $routes;
* 模块
* @var string[]
protected $module;
* @var NebulaApplication
protected $applicaton;
public function __construct(NebulaApplication $applicaton)
$this->applicaton = $applicaton;
$this->routes = [];
}
* 从模块中加载路由
* @return void
public function loadFromModule(Manager $manager)
$groups = $this->applicaton->getConfig()->get('app.active', ['default']);
foreach ($groups as $group) {
$manager->loadRoute($group, $this);
* 添加分组数据
* @param string $group
* @param GroupRoutes $route
public function addGroupRoute(string $group, GroupRoutes $route)
if (\array_key_exists($group, $this->routes)) {
$this->routes[$group]->merge($route);
} else {
$this->routes[$group] = $route;
* 匹配路由
* @param Request $request
* @return MatchResult|null
public function match(Request $request):?MatchResult
foreach ($this->routes as $group => $routes) {
if (($result = $routes->match($request)) !== null) {
return $result;
return null;