How to Pass Extra Information from a Route to a Controller
Edit this pageWarning: You are browsing the documentation for Symfony 2.4, which is no longer maintained.
Read the updated version of this page for Symfony 6.3 (the current stable version).
How to Pass Extra Information from a Route to a Controller
Parameters inside the defaults
collection don't necessarily have to
match a placeholder in the route path
. In fact, you can use the
defaults
array to specify extra parameters that will then be accessible as
arguments to your controller:
1 2 3 4 5 6 7
# app/config/routing.yml
blog:
path: /blog/{page}
defaults:
_controller: AcmeBlogBundle:Blog:index
page: 1
title: "Hello world!"
1 2 3 4 5 6 7 8 9 10 11 12 13
<!-- app/config/routing.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing
http://symfony.com/schema/routing/routing-1.0.xsd">
<route id="blog" path="/blog/{page}">
<default key="_controller">AcmeBlogBundle:Blog:index</default>
<default key="page">1</default>
<default key="title">Hello world!</default>
</route>
</routes>
1 2 3 4 5 6 7 8 9 10 11 12
// app/config/routing.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add('blog', new Route('/blog/{page}', array(
'_controller' => 'AcmeBlogBundle:Blog:index',
'page' => 1,
'title' => 'Hello world!',
)));
return $collection;
Now, you can access this extra parameter in your controller:
1 2 3 4
public function indexAction($page, $title)
{
// ...
}
As you can see, the $title
variable was never defined inside the route path,
but you can still access its value from inside your controller.