Как передать дополнительную информацию из маршрута в контроллер¶
Параметры внутри коллекции defaults
не обязательно должны совпадать
с заполнителями в маршруте path
. Более того, вы можетеиспользовать
массив defaults
, чтобы указать дополнительные параметры, доступные в
качестве аргументов вашего контроллера, и в качестве атрибутов объекта Request
:
- YAML
1 2 3 4 5 6 7
# config/routes.yaml blog: path: /blog/{page} controller: App\Controller\BlogController::index defaults: page: 1 title: "Hello world!"
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13
<!-- config/routes.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">App\Controller\BlogController::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
// config/routes.php use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; $collection = new RouteCollection(); $collection->add('blog', new Route('/blog/{page}', array( '_controller' => 'App\Controller\BlogController::index', 'page' => 1, 'title' => 'Hello world!', ))); return $collection;
Теперь вы можете получить доступ к этому дополнительному параметру в вашем контроллере, как к аргументу в методе контроллера:
1 2 3 4 | public function index($page, $title)
{
// ...
}
|
В качестве альтернативы, заголовок может быть доступен через объект Request
:
1 2 3 4 5 6 7 8 | use Symfony\Component\HttpFoundation\Request;
public function index(Request $request, $page)
{
$title = $request->attributes->get('title');
// ...
}
|
Как вы можете увидеть, переменная $title
никогда не была определена внутри
пути маршрута, но вы все равно можете получить доступ к ее значению изнутри
вашего контроллера, через аргумент метода или через мультимножество attributes
объекта Request
.
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.