Как передать дополнительную информацию из маршрута в контроллер

Как передать дополнительную информацию из маршрута в контроллер

Параметры внутри коллекции defaults не обязательно должны совпадать с заполнителями в маршруте path. Более того, вы можетеиспользовать массив defaults, чтобы указать дополнительные параметры, доступные в качестве аргументов вашего контроллера, и в качестве атрибутов объекта Request:

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!"

Теперь вы можете получить доступ к этому дополнительному параметру в вашем контроллере, как к аргументу в методе контроллера:

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.