WARNING:
You are browsing the documentation for Symfony 2.5
which is not maintained anymore.
Consider upgrading your projects to Symfony 5.2.
How to Pass Extra Information from a Route to a Controller
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:
- YAML
1 2 3 4 5 6 7
# app/config/routing.yml blog: path: /blog/{page} defaults: _controller: AppBundle:Blog:index page: 1 title: "Hello world!"
- XML
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">AppBundle:Blog:index</default> <default key="page">1</default> <default key="title">Hello world!</default> </route> </routes>
- PHP
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' => 'AppBundle:Blog:index', 'page' => 1, 'title' => 'Hello world!', ))); return $collection;
Now, you can access this extra parameter in your controller:
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.
This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.