Router¶
Routing can be used in addition to the default mechanism that associates controller/action/{parameters}
with an url.
Routing works by using the @route annotation on controller methods.
Routes definition¶
Creation¶
1 2 3 4 5 6 7 8 9 10 11 12 | namespace controllers;
/**
* Controller Products
**/
class Products extends ControllerBase{
/**
* @route("products")
*/
public function index(){}
}
|
The method Products::index()
will be accessible via the url /products
.
Route parameters¶
A route can have parameters:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | namespace controllers;
/**
* Controller Products
**/
class Products extends ControllerBase{
...
/**
* Matches products/*
*
* @Route("products/{value}")
*/
public function search($value){
// $value will equal the dynamic part of the URL
// e.g. at /products/brocolis, then $value='brocolis'
// ...
}
}
|
Route optional parameters¶
A route can define optional parameters, if the associated method has optional arguments:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | namespace controllers;
/**
* Controller Products
**/
class Products extends ControllerBase{
...
/**
* Matches products/all/(.*?)/(.*?)
*
* @Route("products/all/{pageNum}/{countPerPage}")
*/
public function list($pageNum,$countPerPage=50){
// ...
}
}
|
Route name¶
It is possible to specify the name of a route, this name then facilitates access to the associated url.
If the name attribute is not specified, each route has a default name, based on the pattern controllerName_methodName.
1 2 3 4 5 6 7 8 9 10 11 12 | namespace controllers;
/**
* Controller Products
**/
class Products extends ControllerBase{
/**
* @route("products","name"=>"products_index")
*/
public function index(){}
}
|
URL or path generation¶
Route names can be used to generate URLs or paths.
Linking to Pages in Twig
<a href="{{ path('products_index') }}">Products</a>