Skip to content

Routing

Laureano F. Lamonega edited this page Jul 17, 2026 · 2 revisions

Routing

Basic Routes

$router->get('/users', [UserController::class, 'index']);
$router->post('/users', [UserController::class, 'store']);
$router->put('/users/{id}', [UserController::class, 'update']);
$router->delete('/users/{id}', [UserController::class, 'destroy']);

Route Parameters

$router->get('/posts/{slug}', fn (Request $r) => "Post: " . $r->get('slug'));

// With regex constraint:
$router->get('/users/{id:\d+}', [UserController::class, 'show']);

Parameters are available via $request->get('param') or $request->route('param').

Multiple Methods

$router->match(['GET', 'POST'], '/form', [FormController::class, 'handle']);

Named Routes

$router->get('/posts/{slug}', [PostController::class, 'show'])->name('posts.show');

// Generate URL:
$url = route('posts.show', ['slug' => 'hello-world']);  // /posts/hello-world

Groups

$router->group('/admin', function (Router $r) {
    $r->get('/dashboard', [AdminController::class, 'dashboard'])->name('admin.dashboard');
    $r->get('/users', [AdminController::class, 'users'])->name('admin.users');
}, ['App\Middleware\AuthMiddleware']);

Middleware

Route-level

$router->get('/dashboard', [DashboardController::class, 'index'])->middleware(AuthMiddleware::class);

Global

$router->addMiddleware(App\Middleware\CsrfMiddleware::class);

Group

Middleware passed to group() is applied to all routes within the group.

Writing Middleware

use Antimonial\Middleware\MiddlewareInterface;

class AuthMiddleware implements MiddlewareInterface
{
    public function handle(Request $request, callable $next): Response
    {
        if (!$request->header('Authorization')) {
            return (new Response())->status(401)->body('Unauthorized');
        }
        return $next($request);
    }
}

Clone this wiki locally