devvime/modularis

A Minimal and Expressive PHP Micro Routing Framework

1.0.1 2025-05-30 17:54 UTC

This package is auto-updated.

Last update: 2025-05-30 18:10:02 UTC


README

A Minimal and Expressive PHP Micro Routing Framework

Getting Started

require dirname(__DIR__) . '/vendor/autoload.php';

use Modularis\Router;

$router = new Router();

// Define your routes here

$router->dispatch();

Defining Routes

Supported HTTP methods: GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD

$router->get('/', function ($request, $response) {
    $response->render('Hello World!');
});

Route with Controller Method

use Modularis\Controller\UserController;

$router->get('/', UserController::class .  '@show');

Route with Middleware

$router->get('/', function ($request, $response) {
    $response->render('Hello World!');
}, function ($request, $response) {
    // Middleware logic
});

Route with Multiple Middlewares

$router->get('/', function ($request, $response) {
    $response->render('Hello World!');
}, [
    function ($request, $response) {
        // First middleware logic
    },
    function ($request, $response) {
        // Second middleware logic
    }
]);

Middleware Classes

use Modularis\Middleware\AuthMiddleware;
use Modularis\Controller\AuthController;

$router->get('/', function ($request, $response) {
    $response->render('Hello World!');
}, AuthMiddleware::class . '@verify');

$router->get('/', function ($request, $response) {
    $response->render('Hello World!');
}, [
    AuthMiddleware::class . '@verify',
    AuthMiddleware::class . '@permissions'
]);

$router->get('/', AuthController::class . '@index', [
    AuthMiddleware::class . '@verify',
    AuthMiddleware::class . '@permissions'
]);

Route Groups

Basic Group

$router->group('/user')->init()
    ->get('/', function ($request, $response) {
        // GET logic
    })
    ->post('/', function ($request, $response) {
        // POST logic
    })
    ->put('/', function ($request, $response) {
        // PUT logic
    })
    ->delete('/', function ($request, $response) {
        // DELETE logic
    })
    ->endGroup();

With Controllers

use Modularis\Controller\UserController;

$router->group('/user')->init()
    ->get('/', UserController::class . '@index')
    ->post('/', UserController::class . '@store')
    ->put('/', UserController::class . '@update')
    ->delete('/', UserController::class . '@destroy')
    ->endGroup();

Route Group with Middleware

Anonymous Middleware

use Modularis\Controller\UserController;

$router->group('/user', function ($request, $response) {
    // Group-level middleware logic
})->init()
    ->get('/', UserController::class . '@index', function ($request, $response) {
        // Route-level middleware logic
    })
    ->post('/', UserController::class . '@store')
    ->put('/', UserController::class . '@update', [
        function ($request, $response) {
            // First middleware logic
        },
        function ($request, $response) {
            // Second middleware logic
        }
    ])
    ->delete('/', UserController::class . '@destroy')
    ->endGroup();

Using Middleware Classes

use Modularis\Controller\UserController;
use Modularis\Middleware\AuthMiddleware;

$router->group('/user', AuthMiddleware::class . '@verify')->init()
    ->get('/', UserController::class . '@index', AuthMiddleware::class . '@permissions')
    ->post('/', UserController::class . '@store')
    ->put('/', UserController::class . '@update', [
        AuthMiddleware::class . '@verify',
        AuthMiddleware::class . '@permissions'
    ])
    ->delete('/', UserController::class . '@destroy')
    ->endGroup();

Route Parameters

Typed parameters syntax: /user/{id:int}/{name:string}/{token:uuid}

$router->get('/user/{id:int}', function ($request, $response) {
    $userId = $request->params['id'];

    print_r($request->params);  // URL parameters
    print_r($request->body);    // POST data
    print_r($request->query);   // GET query parameters
    print_r($request->headers); // HTTP headers

    $response->render('Hello World!');

    $response->json([
        'status' => 200,
        'message' => 'Success'
    ]);
});

Using a Controller

namespace Modularis\Controller;

class UserController
{
    public function show($request, $response)
    {
        $userId = $request->params['id'];

        print_r($request->params);
        print_r($request->body);
        print_r($request->query);
        print_r($request->headers);

        $response->render('Hello World!');

        $response->json([
            'status' => 200,
            'message' => 'Success'
        ]);
    }
}
//=========================================

use Modularis\Controller\UserController;

$router->get('/user/{id:int}', UserController::class . '@show');

Router Execution

require dirname(__DIR__) . '/vendor/autoload.php';

use Modularis\Router;
use Modularis\Controller\UserController;

$router = new Router();

$router->group('/user')->init()
    ->get('/', UserController::class . '@index')
    ->post('/', UserController::class . '@store')
    ->put('/', UserController::class . '@update')
    ->delete('/', UserController::class . '@destroy')
    ->endGroup();

$router->dispatch();