Routes are a way of connecting request URLs to objects in your application. At their core routes
are a set of regular expressions that are used to match requests to destinations.
Examples:
Router::connect('/:controller/:action/*');
The first token ':controller' will be used as a controller name while the second is used as the action name.
the '/*' syntax makes this route greedy in that it will match requests like /posts/index as well as requests
like /posts/edit/1/foo/bar.
Router::connect('/home-page', array('controller' => 'pages', 'action' => 'display', 'home'));
The above shows the use of route parameter defaults, and providing routing parameters for a static route.
Router::connect(
'/:lang/:controller/:action/:id',
array(),
array('id' => '[0-9]+', 'lang' => '[a-z]{3}')
);
Shows connecting a route with custom route parameters as well as providing patterns for those parameters.
Patterns for routing parameters do not need capturing groups, as one will be added for each route params.
$defaults is merged with the results of parsing the request URL to form the final routing destination and its
parameters. This destination is expressed as an associative array by Router. See the output of {@link parse()}.
$options offers four 'special' keys. pass, named, persist and routeClass
have special meaning in the $options array.
- pass is used to define which of the routed parameters should be shifted into the pass array. Adding a
parameter to pass will remove it from the regular route array. Ex. 'pass' => array('slug')
- persist is used to define which route parameters should be automatically included when generating
new URLs. You can override persistent parameters by redefining them in a URL or remove them by
setting the parameter to false. Ex. 'persist' => array('lang')
- routeClass is used to extend and change how individual routes parse requests and handle reverse routing,
via a custom routing class. Ex. 'routeClass' => 'SlugRoute'
- named is used to configure named parameters at the route level. This key uses the same options
as Router::connectNamed()
You can also add additional conditions for matching routes to the $defaults array.
The following conditions can be used:
- [type] Only match requests for specific content types.
- [method] Only match requests with specific HTTP verbs.
- [server] Only match when $_SERVER['SERVER_NAME'] matches the given value.
Example of using the [method] condition:
Router::connect('/tasks', array('controller' => 'tasks', 'action' => 'index', '[method]' => 'GET'));
The above route will only be matched for GET requests. POST requests will fail to match this route.
public static connect ( string $route, array $defaults = [], array $options = [] ) : array | ||
$route | string | A string describing the template of the route |
$defaults | array | An array describing the default route parameters. These parameters will be used by default and can supply routing parameters that are not dynamic. See above. |
$options | array | An array matching the named elements in the route to regular expressions which that element should match. Also contains additional parameters such as which routed parameters should be shifted into the passed arguments, supplying patterns for routing parameters and supplying the name of a custom routing class. |
return | array | Array of routes |