attribute-router / router
There is no license information available for the latest version (1.0.0) of this package.
1.0.0
2024-11-06 15:40 UTC
Requires
- php-di/php-di: ^7.0
Requires (Dev)
- phpunit/phpunit: ^11.4
README
composer require attribute-router/router
Controller
declare(strict_types=1); namespace Controller; use AttributeRouter\Route; use AttributeRouter\RouteGroup; #[RouteGroup(path: '/admin')] class HomeController { #[Route(path: '/edit/{id}/{uuid?}', methods: ['GET'], name: 'edit', patterns: ['id' => '[0-9]+'])] public function edit(int $id, ?string $uuid = null) { // } }
Initialization
require '../vendor/autoload.php'; use Controller\HomeController; use AttributeRouter\Router; use DI\Container; use Controller\TestController; $container = new Container; $router = $container->get(Router::class); $router->registerRoutes([ HomeController::class, TestController::class, ]); $requestUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); $requestMethod = $_SERVER['REQUEST_METHOD']; $router->dispatch($requestUri, $requestMethod);
It is also possible to specify languages. But it should be specified before registering the controllers.
$container = new Container; $router = $container->get(Router::class); $router->setDefaultLocale('en')->setLocales(['en', 'ru', 'fr']); $router->registerRoutes([ HomeController::class, TestController::class, ]); $requestUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); $requestMethod = $_SERVER['REQUEST_METHOD']; $router->dispatch($requestUri, $requestMethod);
Cached routes can be forwarded. This method is shown for familiarization. You can use special classes for this.
$container = new Container; $router = $container->get(Router::class); $router->registerRoutes([ HomeController::class, TestController::class, ]); file_put_contents('cache.txt', serialize($router->getRoutes()));
If routes are cached, you can do without registering controllers
$container = new Container; $router = $container->get(Router::class); $data = unserialize(file_get_contents('cache.txt')); $router->setRoutes($data); $router->dispatch($requestUri, $requestMethod);