LightRouter
Lightweight PHP router class. This is a test project. If you need a reliable & fully tested solution please check out FastRoute or AltoRouter.
$router = new mattvb91\LightRouter\Router();
$router->addRoute('/', MyController::class);
$router->run();
To add new routes use the $router->addRoute()
method. If no action is defined
it will default to index
which will be needed on your controller.
You will need to pass the route path & either a controller or a closure. If you do not specify an action it will default to 'index' which will be required on your controller.
$router->addRoute('/', MyController::class);
$router->addRoute('/contact', MyController::class, 'contact');
$route->addRoute('/hello', function() {
echo 'Hello world';
});
Passing parameters into your controller actions can be done using a :parameter
attribute
in your route definition:
$router->addRoute('/view/:param', MyController::class);
Your method parameter must match the defined route parameter. In our example above
our controllers view
method would look like this:
public function view($param)
{
}
If you are using the LightModel
ORM package for your DB models you can automatically
inject the associated model by specifying the instance type in your
controller action:
//Your route definition
$router->addRoute('/user/view/:user', UserController::class, 'view');
//In your UserController::class
public function view(User $user)
{
//$user is already fully loaded for you.
}
If you are using your own ORM or other DB model class you can also implement
the LightRouteModelInterface::class
in your custom model which expects
you to return the fully loaded instance.
LightRouter will pass the associated $key from your route into the getForLightRoute
method:
public class CustomModel implements LightRouteModelInterface
{
public static function getForLightRoute($routeParam): LightRouteModelInterface
{
//Use $routeParam to load your model class and return the instance
}
}