PHP code example of power-modules / router

1. Go to this page and download the library: Download power-modules/router 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/ */

    

power-modules / router example snippets




use Modular\Framework\App\ModularAppBuilder;
use Modular\Router\RoutingModule;
use Modular\Router\RouterModule;
use Modular\Router\PowerModule\Setup\RoutingSetup;

$app = new ModularAppBuilder(__DIR__)
    ->withPowerSetup(...RoutingSetup::withDefaults())
    ->withModules(
        RoutingModule::class,          // Provides default synthetic responses, global decorators, and entrypoint middleware
        RouterModule::class,           // Provides routing infrastructure
        \MyApp\User\UserModule::class, // Your modules with routes
        \MyApp\Admin\AdminModule::class,
    )
    ->build();

// Get the composed HTTP entrypoint and handle PSR-7 requests
$httpEntrypoint = $app->get(\Modular\Router\Contract\HttpEntrypointInterface::class);
$response = $httpEntrypoint->handle($serverRequest);



use Modular\Framework\PowerModule\Contract\PowerModule;
use Modular\Framework\Container\ConfigurableContainerInterface;
use Modular\Router\Contract\HasRoutes;
use Modular\Router\Route;

class UserModule implements PowerModule, HasRoutes
{
    public function getRoutes(): array
    {
        return [
            Route::get('/profile', ShowUserProfileHandler::class),
            Route::put('/profile', UpdateUserProfileHandler::class),
            Route::post('/avatar', UploadUserAvatarHandler::class)
                ->addMiddleware(AuthMiddleware::class),
        ];
    }
    
    public function register(ConfigurableContainerInterface $container): void
    {
        $container->set(UserController::class, UserController::class)
            ->addArguments([UserService::class, LoggerInterface::class]);
    }
}
// Results in: /user/profile, /user/avatar



use Modular\Router\Contract\HasCustomRouteSlug;

class ApiV1Module implements PowerModule, HasRoutes, HasCustomRouteSlug
{
    public function getRouteSlug(): string
    {
        return '/api/v1';
    }
    
    public function getRoutes(): array
    {
        return [
            Route::get('/users', ListApiUsersHandler::class),
            Route::post('/users', CreateApiUserHandler::class),
            Route::get('/health', HealthCheckHandler::class),
        ];
    }
}
// Results in: /api/v1/users, /api/v1/health



use Modular\Router\Contract\HasMiddleware;

class AdminModule implements PowerModule, HasRoutes, HasMiddleware
{
    public function getMiddleware(): array
    {
        return [
            AuthMiddleware::class,     // All admin routes :get('/dashboard', AdminDashboardHandler::class),
            Route::delete('/users/{id}', DeleteAdminUserHandler::class)
                ->addMiddleware(ConfirmationMiddleware::class), // Extra confirmation
        ];
    }
}
// Middleware order: Auth → Admin → Audit → [Confirmation] → Controller

// HTTP method factories with intuitive API
Route::get('/users', ListUsersHandler::class);
Route::post('/users', CreateUserHandler::class);
Route::put('/users/{id}', UpdateUserHandler::class);
Route::delete('/users/{id}', DeleteUserHandler::class);

// Each route points to a RequestHandlerInterface implementation
Route::get('/health', HealthCheckHandler::class);

// Fluent middleware chaining
Route::post('/orders', CreateOrderHandler::class)
    ->addMiddleware(AuthMiddleware::class, ValidationMiddleware::class);

// 1. Global Decorator (applied to all routes)
$router->addResponseDecorator(fn(ResponseInterface $r) => $r->withHeader('X-Global', 'true'));

// 2. Module-Level Decorator (applied to all routes in a module)
class UserModule implements PowerModule, HasRoutes, HasResponseDecorators
{
    public function getResponseDecorators(): array
    {
        return [fn(ResponseInterface $r) => $r->withHeader('X-Module', 'true')];
    }
    // ...
}

// 3. Route-Level Decorator (applied to a single route)
Route::get('/profile', UserController::class)
    ->addResponseDecorator(fn(ResponseInterface $r) => $r->withHeader('X-Route', 'true'));

use Modular\Framework\App\ModularAppBuilder;
use Modular\Router\PowerModule\Setup\RoutingSetup;
use Modular\Router\RoutingModule;
use Modular\Router\RouterModule;

$app = new ModularAppBuilder(__DIR__)
    ->withPowerSetup(...RoutingSetup::withDefaults())
    ->withModules(
        RoutingModule::class,
        RouterModule::class,
        UserModule::class,
    )
    ->build();