Поиск…
Вступление
Маршрутизация - это процесс сопоставления URL-адреса контроллеру . У Symfony есть мощный компонент маршрутизации, который позволяет вам определять маршруты.
Компонент Routing поддерживает ряд форматов конфигурации: аннотации, YAML, XML и raw PHP.
параметры
| параметр | подробности |
|---|---|
| название | Название маршрута. Пример: book_show |
| дорожка | Путь (может содержать подстановочные знаки). Пример: /book/{isbn} |
| по умолчанию | Значения параметров по умолчанию |
Простые маршруты
Использование YAML:
# app/config/routing.yml
blog_list:
path: /blog
defaults: { _controller: AppBundle:Blog:list }
Использование аннотаций:
// src/AppBundle/Controller/BlogController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class BlogController extends Controller
{
/**
* @Route("/blog", name="blog_list")
*/
public function listAction()
{
// ...
}
}
Просьба о /blog URL будет обрабатываться listAction() способом по BlogController внутри AppBundle .
Маршруты с заполнителями
Использование YAML:
# app/config/routing.yml
blog_show:
path: /blog/{slug}
defaults: { _controller: AppBundle:Blog:show }
Использование аннотаций:
// src/AppBundle/Controller/BlogController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class BlogController extends Controller
{
/**
* @Route("/blog/{slug}", name="blog_show")
*/
public function showAction($slug)
{
// ...
}
}
Любой запрос с соответствующей URL - /blog/* будет обрабатываться showAction() способом по BlogController в AppBundle . Действие контроллера будет принимать значение заполнителя в качестве аргумента метода.
Например, запрос /blog/my-post вызовет вызов showAction() с аргументом $slug содержащим значение my-post . Используя этот аргумент, действие контроллера может изменить ответ в зависимости от значения заполнителя, например, путем извлечения сообщения в блоге с помощью slug my-post из базы данных.
Значения по умолчанию для заполнителей
Если вы хотите иметь местозаполнитель, который может быть опущен, вы можете присвоить ему значение по умолчанию:
Использование YAML:
# app/config/routing.yml
blog_list:
path: /blog/{page}
defaults: { _controller: AppBundle:Blog:list, page: 1 }
requirements:
page: '\d+'
Использование аннотаций:
// src/AppBundle/Controller/BlogController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class BlogController extends Controller
{
/**
* @Route("/blog/{page}", name="blog_list", requirements={"page": "\d+"})
*/
public function listAction($page = 1)
{
// ...
}
}
В этом примере URL-адреса /blog и /blog/1 будут соответствовать маршруту blog_list и будут обрабатываться методом listAction() . В случае /blog , listAction() все равно получит аргумент $page со значением по умолчанию 1 .