DLight\Application\Router
Mô tả: router HTTP đơn giản, hỗ trợ đăng ký route tĩnh (sign()/signApi()),
nhóm route (group()), middleware, đặt tên route (name()), và quét Attribute để auto-register route từ Controller.
Namespace / đăng ký
- Namespace:
DLight\Application - File:
src/Application/Router.php - Autoload: PSR-4 (
DLight\→src/)
Public API (dùng bên ngoài)
Router::sign(string $spec, mixed $handler, array $middleware = []): selfRouter::signApi(string $spec, mixed $handler, array $middleware = []): selfRouter::all(string $path, mixed $handler, array $middleware = []): selfRouter::group(string $prefix): selfRouter::middleware(string|array $mw): selfRouter::namePrefix(string $prefix): selfRouter::name(string $name): selfRouter::action(callable $cb): selfRouter::default(callable $handler, ?int $code = 404): selfRouter::scanControllerAttributes(array $controllers): voidRouter::route(string $name, array $params = [], ?string $base = null): ?stringRouter::getRegisteredRoutes(): arrayRouter::run(): void
Khai báo route cơ bản
sign() nhận $spec theo dạng "METHOD /path" hoặc "GET|POST /path".
use DLight\Application\Router;
use DLight\Application\View;
Router::sign('GET /', function () {
return View::render('client.home', ['title' => '<title>Home</title>']);
});
Router::sign('GET /users/{id}', function ($id) {
return "User id = " . $id;
});
API route (tự thêm prefix /api/)
use DLight\Application\Router;
Router::signApi('GET /products', function () {
return ['code' => 200, 'data' => ['a', 'b']];
});
// /api/products/{id}
Router::signApi('GET /products/{id}', function ($id) {
return ['code' => 200, 'id' => $id];
});
Khi là API, Router sẽ tự set Content-Type: application/json và encode JSON.
Group + middleware + đặt tên route
use DLight\Application\Router;
Router::group('/admin')
->middleware(['auth', 'admin'])
->namePrefix('admin.')
->action(function () {
Router::sign('GET /dashboard', 'App\\Controller\\AdminController@dashboard')
->name('dashboard');
});
// Generate URL theo tên
$url = Router::route('admin.dashboard');
Middleware dạng string sẽ chạy qua DLight\Application\Middleware::run().
Middleware dạng callable nhận $context = ['params' => ..., 'request' => ...].
Default handler (fallback)
use DLight\Application\Router;
Router::default(function () {
return "Not Found";
}, 404);
Quét Attribute trên Controller
Router hỗ trợ đọc Attribute DLight\Application\Router hoặc DLight\Attribute\Route trên method public của controller.
Khi quét, Router sẽ gọi sign()/signApi() tương ứng.
use DLight\Application\Router;
Router::scanControllerAttributes([
App\\Controller\\UserController::class,
]);