1. Go to this page and download the library: Download marcosdipaolo/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/ */
marcosdipaolo / router example snippets
MDP\Container\Container;
use MDP\Router\Router;
// Create and configure container
$container = new Container();
$container->set(UserRepositoryInterface::class, UserRepository::class);
// Create router with your controllers
$router = Router::create(
[App\Http\Controllers\UserController::class],
$container,
__DIR__ . '/storage/cache', // Cache directory (optional)
true // Enable caching (optional)
);
// Add global middleware
$router->middleware(MDP\Middleware\SecurityHeadersMiddleware::class);
$router->middleware(MDP\Middleware\CorsMiddleware::class);
// Enable debug mode in development
if (getenv('APP_ENV') === 'development') {
$router->debug(true);
}
// Handle the request
$response = $router->direct();
$response->send();
namespace App\Http\Controllers;
use MDP\Http\Request;
use MDP\Http\Response;
use MDP\Router\Attributes\{Get, Post, Put, Patch, Delete};
class UserController
{
public function __construct(private UserRepository $users)
{
}
#[Get("/users")]
public function index(Request $request, Response $response): Response
{
$users = $this->users->all();
return $response->json(['data' => $users]);
}
#[Get("/users/{id}")]
public function show(Request $request, Response $response): Response
{
$id = $request->getRouteParam('id');
$user = $this->users->find($id);
if (!$user) {
return $response->setStatusCode(404)->json(['error' => 'User not found']);
}
return $response->json(['data' => $user]);
}
#[Post("/users")]
public function store(Request $request, Response $response): Response
{
$data = $request->getJsonBody();
$user = $this->users->create($data);
return $response->setStatusCode(201)->json(['data' => $user]);
}
#[Put("/users/{id}")]
public function update(Request $request, Response $response): Response
{
$id = $request->getRouteParam('id');
$data = $request->getJsonBody();
$user = $this->users->update($id, $data);
return $response->json(['data' => $user]);
}
#[Patch("/users/{id}")]
public function patch(Request $request, Response $response): Response
{
$id = $request->getRouteParam('id');
$data = $request->getJsonBody();
$user = $this->users->patch($id, $data);
return $response->json(['data' => $user]);
}
#[Delete("/users/{id}")]
public function destroy(Request $request, Response $response): Response
{
$id = $request->getRouteParam('id');
$this->users->delete($id);
return $response->setStatusCode(204);
}
}
// Request object
$request->getMethod(); // HTTP method
$request->getUri(); // Request URI
$request->getQuery('key'); // Query parameter
$request->getPost('key'); // POST data
$request->getRouteParam('id'); // Route parameter
$request->getJsonBody(); // Parsed JSON body
$request->getHeader('Accept'); // HTTP header
$request->getIP(); // Client IP
$request->isJson(); // Check if JSON request
$request->isAjax(); // Check if AJAX request
// Response object
$response->json(['data' => $user]); // Send JSON
$response->html('<h1>Hello</h1>'); // Send HTML
$response->text('Hello World'); // Send plain text
$response->setStatusCode(201); // Set HTTP status
$response->setHeader('X-Custom', 'value'); // Set header
$response->redirect('/new/path'); // Redirect
$response->addCorsHeaders(); // Add CORS headers
$response->addSecurityHeaders(); // Add security headers
$response->send(); // Send response
#[Get("/posts/{id}")]
public function show(Request $request): Response
{
$id = $request->getRouteParam('id');
// ...
}
#[Get("/posts/{id}/comments/{commentId}")]
public function showComment(Request $request): Response
{
$postId = $request->getRouteParam('id');
$commentId = $request->getRouteParam('commentId');
// ...
}
use MDP\Http\Request;
use MDP\Http\Response;
$router->group('/api', [AuthMiddleware::class], function ($group) {
$group->get('/users', 'UserController@index');
$group->post('/users', 'UserController@store');
$group->group('/admin', [AdminMiddleware::class], function ($adminGroup) {
$adminGroup->get('/stats', 'AdminController@stats');
});
});
use MDP\Http\Request;
use MDP\Http\Response;
use MDP\Middleware\MiddlewareInterface;
class AuthMiddleware implements MiddlewareInterface
{
public function handle(Request $request, Response $response, callable $next)
{
// Check authentication
if (!$this->isAuthenticated()) {
return $response->setStatusCode(401)->json(['error' => 'Unauthorized']);
}
// Pass to next middleware/handler
return $next($request, $response);
}
private function isAuthenticated(): bool
{
// Implementation
return true;
}
}
// Global middleware
$router->middleware(AuthMiddleware::class);
// Per-route middleware
#[Get("/protected")]
public function protected(Request $request, Response $response): Response
{
// ...
}
if (getenv('APP_ENV') === 'development') {
$router->debug(true);
}
// List all registered routes
$routes = $router->listRoutes();
foreach ($routes as $route) {
echo $route['method'] . ' ' . $route['path'] . ' => ' . $route['action'];
}
// Success
$response->setStatusCode(200); // OK
$response->setStatusCode(201); // Created
$response->setStatusCode(204); // No Content
// Redirection
$response->setStatusCode(301); // Moved Permanently
$response->setStatusCode(302); // Found
// Client Errors
$response->setStatusCode(400); // Bad Request
$response->setStatusCode(401); // Unauthorized
$response->setStatusCode(403); // Forbidden
$response->setStatusCode(404); // Not Found
$response->setStatusCode(422); // Unprocessable Entity
// Server Errors
$response->setStatusCode(500); // Internal Server Error
$response->setStatusCode(503); // Service Unavailable
use PHPUnit\Framework\TestCase;
use MDP\Http\Request;
use MDP\Http\Response;
class UserControllerTest extends TestCase
{
public function testGetUser()
{
$request = new Request('GET', '/users/123');
$response = $this->router->direct($request);
$this->assertEquals(200, $response->getStatusCode());
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.