Skip to main content

Routing

Noor provides a clean, fluent routing API inspired by Laravel.

Basic Routes​

Route::get('/users', $handler);
Route::post('/users', $handler);
Route::put('/users/{id}', $handler);
Route::patch('/users/{id}', $handler);
Route::delete('/users/{id}', $handler);
Route::options('/users', $handler);

Multiple Methods​

Route::match(['get', 'post'], '/form', $handler);
Route::any('/catch-all', $handler);

Route Parameters​

Required parameters are wrapped in curly braces:

Route::get('/user/{id}', function ($request) {
return "User ID: " . $request->id;
});

Route::get('/post/{slug}', function ($request) {
return "Post: " . $request->slug;
});

Optional Parameters​

Route::get('/user/{id}/{slug?}', function ($request) {
return $request->slug ?? 'No slug provided';
});

Where Constraints​

Route::get('/user/{id}', $handler)->where('id', '[0-9]+');
Route::get('/post/{slug}', $handler)->where('slug', '[a-z-]+');

Named Routes​

Route::get('/profile', $handler)->name('profile');
Route::get('/user/{id}', $handler)->name('user.show');

// Generate URLs
$url = Route::url('profile');
$url = Route::url('user.show', ['id' => 5]);

Route Groups​

Prefix Groups​

Route::group(['prefix' => '/api'], function () {
Route::get('/users', $handler); // /api/users
Route::get('/posts', $handler); // /api/posts
});

Middleware Groups​

Route::group(['middleware' => ['auth']], function () {
Route::get('/dashboard', $handler);
Route::get('/settings', $handler);
});

Combined​

Route::group(['prefix' => '/admin', 'middleware' => ['auth']], function () {
Route::get('/', $handler); // /admin
Route::get('/users', $handler); // /admin/users
});

Nested Groups​

Route::group(['prefix' => '/api'], function () {
Route::group(['middleware' => ['auth']], function () {
Route::get('/profile', $handler); // /api/profile (with auth)
});
});

Route Handlers​

Closure​

Route::get('/', function ($request) {
return response()->json(['hello' => 'world']);
});

Controller Classes​

// controllers/UserController.php
class UserController {
public function index($request) {
return DB::table('users')->get();
}
}

Route::get('/users', 'UserController@index');
// or
Route::get('/users', [UserController::class, 'index']);