Параметры в URL

Указать параметры в URL можно через код ниже:

# src/Controller/PostsController.php

class PostsController extends AbstractController
{

    /** @Route("/posts/{id}") **/
    public function view($id)
    {
        return $this->render('posts/view.html.twig');
    }

}

Имена параметров, указанные внутри @Route() и function() должны совпадать, иначе будет ошибка «RuntimeException: Could not resolve argument».

/** @Route("/posts/{id}") **/
public function view($slug)
{
    // Ошибка: Не получается найти аргумент $slug
}

Можно указать тип параметра (например число или строка), который должен быть передан в URL. Если в указанном параметре можно передавать только числа, то надо указать значение int.

# в качестве $id можно передавать только числа

/** @Route("/posts/{id}, requirements={"id"="\d+"}") **/
public function view(int $id) {
    // код
}

В параметре requirements строка «\d» означает, что в $id могут быть только числа. А знак «+» означает, что чисел может быть любое количество. Данный синтаксис называется «регулярные выражения».

Группа параметров

Перед созданием класса можно указать раздел, например «/posts». И все странцы в текущем контроллере будут находится внутри данного раздела.

# src/Controller/PostsController.php

/**
 * @Route("/posts")
 */
class PostsController extends AbstractController
{

    /** @Route("/") **/
    public function index()
    {
        // страница «/posts/»
    }

    /** @Route("/{id}") **/
    public function view($id)
    {
        // страница «/posts/17»
    }
}