PHP code example of vagkalosynakis / league-router-attributes

1. Go to this page and download the library: Download vagkalosynakis/league-router-attributes library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?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
}

#[Route(['GET'], '/users/{id:\d+}')]              // Numeric ID
#[Route(['GET'], '/posts/{slug:[a-z0-9-]+}')]    // Alphanumeric slug
#[Route(['GET'], '/files/{path:.+}')]             // Catch-all path

VagKalosynakis\LeagueRouteAttributes\
├── Attributes/
│   ├── Route.php               # Route declaration
│   ├── Middleware.php          # Middleware application
│   └── WithoutMiddleware.php   # Middleware exclusion
└── Discovery/
    └── RouteDiscovery.php      # Route scanning and registration