It's useful to see what is generated by Symfony framework, this one provide tools to watch all routes of an specific application.
From the Symfony Doc, use (in a shell) :
php bin/console debug:router
As well, you can watch all the relevant routes informations in the Framework profiler, in the routing menu :
The routing configuration is included in your app/config/config.yml
file, by default the app/config/routing.yml
file.
From there you can link to your own routing configuration in a bundle
# app/config/routing.yml
app:
resource: "@AppBundle/Resources/config/routing.yml"
It might also contain several application global routes.
In your own bundle you can configure, routes which serve two purposes:
Below is an example YAML route configuration:
# src/AppBundle/Resources/config/routing.yml
my_page:
path: /application/content/page/{parameter}
defaults:
_controller: AppBundle:Default:myPage
parameter: 42
requirements:
parameter: '\d+'
methods: [ GET, PUT ]
condition: "request.headers.get('User-Agent') matches '/firefox/i'"
The route is named my_page
, and calls the myPageAction
of the DefaultController
in the AppBundle
when requested. It has a parameter, named parameter
with a default value. The value is only valid when it matches the regex \d+
. For this route, only the HTTP methods GET
and PUT
are accepted. The condition
is an expression in the example the route won't match unless the User-Agent header matches firefox. You can do any complex logic you need in the expression by leveraging two variables that are passed into the expression: context
(RequestContext) and request
(Symfony Request).
A generated route with the parameter value of 10 might look like /application/content/page/10
.
The routing configuration is included in your app/config/config.yml
file, by default the app/config/routing.yml
file.
From there you can link to the controllers that have annotated routing configuration:
# app/config/routing.yml
app:
resource: "@AppBundle/Controller"
type: annotation
In your own bundle you can configure, routes which serve two purposes:
Below is an example annotated route configuration:
// src/AppBundle/Controller/DefaultController.php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
/**
* @Route("/application")
*/
class DefaultController extends Controller {
/**
* @Route("/content/page/{parameter}",
* name="my_page",
* requirements={"parameter" = "\d+"},
* defaults={"parameter" = 42})
* @Method({"GET", "PUT"})
*/
public function myPageAction($parameter)
{
// ...
}
}
The controller is annotated with a prefix route, such that any configured route in this controller will be prepended using the prefix.
The configured route is named my_page
, and calls the myPageAction
function when requested. It has a parameter, named parameter
with a default value. The value is only valid when it matches the regex \d+
. For this route, only the HTTP methods GET
and PUT
are accepted.
Notice that the parameter is injected into the action as a function parameter.
A generated route with the parameter value of 10 might look like /application/content/page/10
.
Traditionally, you can use routing to map an the request with the Routing Component who handled request and response parameters by HttpFoundation Component.
Additionally, a custom route parameter can be created by using the FOSRestBundle to extends the default functionalities of the Routing Component.
This is useful for creating REST routes, an really useful to specify how to tranfer structured data like XML or json file in a request (and a response).
See FOSRestBundle Doc for more information, and especially this annotation :
use FOS\RestBundle\Controller\Annotations\FileParam;
/**
* @FileParam(
* name="",
* key=null,
* requirements={},
* default=null,
* description="",
* strict=true,
* nullable=false,
* image=false
* )
*/