PHP code example of zero-to-prod / http-router
1. Go to this page and download the library: Download zero-to-prod/http-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/ */
zero-to-prod / http-router example snippets
use Zerotoprod\HttpRouter\HttpRouter;
$router = HttpRouter::for($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
$router->get('/users/{id}', [UserController::class, 'show'])
->where('id', '\d+')
->name('user.show')
->middleware(AuthMiddleware::class);
$router->dispatch();
use Zerotoprod\HttpRouter\HttpRouter;
// Create router and define routes
$router = HttpRouter::create();
// Static routes
$router->get('/', function() {
echo 'Home';
});
// Dynamic routes with parameters
$router->get('/users/{id}', function(array $params) {
echo "User ID: " . $params['id'];
});
// Routes with inline constraints
$router->get('/posts/{id:\d+}', [PostController::class, 'show']);
// Routes with fluent constraints
$router->get('/users/{id}', [UserController::class, 'show'])
->where('id', '\d+');
// IMPORTANT: Set the request method and URI before dispatching
$router->forRequest($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
$router->dispatch();
// Combine create() and forRequest() in one call
$router = HttpRouter::for($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
$router->get('/', function() {
echo 'Home';
});
$router->dispatch();
$router->get('/users', [UserController::class, 'index']);
$router->post('/users', [UserController::class, 'store']);
$router->put('/users/{id}', [UserController::class, 'update']);
$router->patch('/users/{id}', [UserController::class, 'patch']);
$router->delete('/users/{id}', [UserController::class, 'destroy']);
$router->options('/users', [UserController::class, 'options']);
$router->head('/users', [UserController::class, 'head']);
// Multiple methods
$router->any('/users/{id}', [UserController::class, 'handler'], ['GET', 'POST']);
// Generates all 7 RESTful routes
$router->resource('users', UserController::class);
// With filters
$router->resource('posts', PostController::class, ['only' => ['index', 'show']]);
$router->resource('comments', CommentController::class, ['except' => ['destroy']]);
// Prefix groups
$router->prefix('api/v1')->group(function($router) {
$router->get('/users', [UserController::class, 'index']); // /api/v1/users
});
// Middleware groups
$router->middleware([AuthMiddleware::class])->group(function($router) {
$router->get('/dashboard', [DashboardController::class, 'index']);
});
// Combined
$router->prefix('admin')
->middleware([AuthMiddleware::class, AdminMiddleware::class])
->group(function($router) {
$router->get('/users', [AdminController::class, 'users']);
});
// Define named route
$router->get('/users/{id}', [UserController::class, 'show'])
->name('user.show');
// Generate URL
$url = $router->route('user.show', ['id' => 123]); // /users/123
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
class AuthMiddleware implements MiddlewareInterface
{
public function process(
ServerRequestInterface $request,
RequestHandlerInterface $handler
): ResponseInterface {
// Check authentication
return $handler->handle($request);
}
}
$router->get('/dashboard', [DashboardController::class, 'index'])
->middleware(AuthMiddleware::class);
class LogMiddleware
{
public function __invoke(callable $next, ...$context)
{
// Before request
error_log('Request started');
$next();
// After request
error_log('Request completed');
}
}
$router->get('/users', [UserController::class, 'index'])
->middleware(LogMiddleware::class);
$router->globalMiddleware([
CorsMiddleware::class,
SecurityHeadersMiddleware::class
]);
// Enable automatic caching in production
$router->autoCache(
cache_path: __DIR__ . '/cache/routes.php',
env_var: 'APP_ENV',
cache_envs: ['production']
);
// Manual caching
if ($router->isCacheable()) {
$compiled = $router->compile();
file_put_contents('routes.php', $compiled);
}
// Load from cache
$data = file_get_contents('routes.php');
$router->loadCompiled($data);
$router->fallback(function() {
http_response_code(404);
echo 'Not Found';
});
// Pass additional arguments to actions and middleware
$router = Router::for('GET', '/users', $container, $request);
$router->get('/users', function(array $params, $container, $request) {
// Access container and request
});
$router->get('/users/{id?}', function(array $params) {
$id = $params['id'] ?? 'all';
echo "User: $id";
});
$router->get('/posts/{year}/{month}/{slug}', [PostController::class, 'show'])
->where([
'year' => '\d{4}',
'month' => '\d{2}',
'slug' => '[a-z0-9-]+'
]);
// Match everything including slashes
$router->get('/search/{query}', [SearchController::class, 'search'])
->where('query', '.*');
$router->get('/users', [UserController::class, 'index']);
$router->get('/users', UserAction::class);
$router->get('/users', function(array $params) {
echo 'Users';
});