Routing¶
The framework uses the nikic/fast-route library - FastRoute - as its main routing service.
All configuration must be given in the $baseConfig array, under the routes index.
Note
For more information on configuring the application’s routes, please see the Routing Configuration section.
Routes¶
Defining a route is as simple as adding an integer-referenced array to the routes array contained
within the $baseConfig array. This new integer-referenced array must contain three elements,
in the following order: 1- an HTTP verb, 2- a URL, and 3- the name of the controller.
1. The HTTP verb can be one of GET, POST, PUT, PATCH, or DELETE. An array of multiple
HTTP verbs can be given.
Note
If a page is requested with another HTTP verb than the ones that are defined in the corresponding route, the application will return a ‘405 - Method Not Allowed’ header.
2. The URL can contain named placeholders. These are defined by using curly braces. By default, any placeholder
named action will be mapped to the name of a controller’s handler method. The default handler method of
any controller is the indexAction action. By default, LightMVC is a ‘single-action controller’
framework.
The contents of any placeholder will be available within the $vars variable inside the controller’s handler method, under an index with the name of the corresponding HTTP verb, and a sub-index with the name of the placeholder. Finally, any part of the URL can be defined as being optional by using square brackets.
Note
It is possible to use a regex in order to only allow some characters in the URL.
3. The name of the controller must be in lowercase and must map to an existing controller in order to avoid a runtime exception that will be thrown by the controller manager when it tries to get the requested handler (controller method).
Note
The controller name can contain a forward slash (‘/’) in order to reference to a module name. For example, special/index would map to the IndexController within the Special\Controller\ namespace. When no forward slash is given, the default namespace is Application\Controller\.
Here is an example of a more advanced route configuration:
$baseConfig['routes'] = [
[
['GET', 'POST'],
'/products[/{action}[/{id:[0-9]+}]]',
'product',
],
];
In this example, only GET and POST requests will be allowed on any URL beginning with /products.
The URL can also contain an action name, which will map to a request handler method within the controller,
and an id parameter, which will contain at least one digit, ranging from 0 through 9. The contents of the
action and id placeholders will be available in the $vars variable within the controller’s request
handler method: $vars['get']['action'] and $vars['get']['id'].
For further reading on the FastRoute object, please see the
FastRoute Code Repository.
Caching Routes¶
When running a LightMVC application in production mode (please see the Configuration section
for more details), routes will be cached. It is therefore important to delete the cache/routes.cache
file in order to refresh the cache if need be.