Поиск…
Вступление
Маршрутизация - это процесс сопоставления 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
.