<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
vagkalosynakis / league-router-attributes example snippets
namespace App\Controllers;
use VagKalosynakis\LeagueRouteAttributes\Attributes\Route;
class UserController
{
#[Route(['GET'], '/users')]
public function index(): Response
{
// List users
}
#[Route(['GET'], '/users/{id:\d+}')]
public function show(int $id): Response
{
// Show user
}
#[Route(['POST'], '/users')]
public function store(Request $request): Response
{
// Create user
}
#[Route(['PUT', 'PATCH'], '/users/{id:\d+}')]
public function update(int $id, Request $request): Response
{
// Update user - handles both PUT and PATCH
}
#[Route(['DELETE'], '/users/{id:\d+}')]
public function destroy(int $id): Response
{
// Delete user
}
}
#[Route(['GET'], '/admin/users', prefix: '/api/v1', name: 'admin.users')]
public function adminUsers(): Response
{
// Accessible at: /api/v1/admin/users
// Named route: admin.users
}
namespace App\Controllers;
use VagKalosynakis\LeagueRouteAttributes\Attributes\Route;
use VagKalosynakis\LeagueRouteAttributes\Attributes\Middleware;
#[Middleware([AuthMiddleware::class])]
class AdminController
{
#[Route(['GET'], '/dashboard')]
public function dashboard(): Response
{
// Inherits AuthMiddleware from class
}
#[Route(['GET'], '/users')]
#[Middleware([AdminOnlyMiddleware::class])]
public function users(): Response
{
// Has both AuthMiddleware and AdminOnlyMiddleware
}
}
namespace App\Controllers;
use VagKalosynakis\LeagueRouteAttributes\Attributes\Route;
use VagKalosynakis\LeagueRouteAttributes\Attributes\Middleware;
use VagKalosynakis\LeagueRouteAttributes\Attributes\WithoutMiddleware;
#[Middleware([AuthMiddleware::class])]
class ApiController
{
#[Route(['GET'], '/profile')]
public function profile(): Response
{
// Protected:
use League\Route\Router;
use VagKalosynakis\LeagueRouteAttributes\Discovery\RouteDiscovery;
$router = new Router();
$container = /* your PSR-11 container */;
$discovery = new RouteDiscovery($router, $container);
$discovery->discoverRoutes(__DIR__ . '/src/Controllers');
// Routes are now registered with league/route
$response = $router->dispatch($request);
$discovery = new RouteDiscovery($router, $container);
$discovery->registerRoutesForController(UserController::class);
$discovery->registerRoutesForController(AdminController::class);
#[Route(['GET', 'HEAD'], '/users')]
public function index(): Response
{
// Responds to both GET and HEAD requests
}