Маршрутизация отображает URI запроса на метод конкретного контроллера. В общем, любой URI состоит из следующих трех частей:
- Имя хоста
- Сегмент пути
- Сегмент запросов
Например, в URI / URL http://www.tutorialspoint.com/index?q=data, www.tutorialspoint.com — сегмент имени хоста, index — сегмент пути, а q = data — сегмент запроса. Как правило, маршрутизация проверяет сегмент страницы с набором ограничений. Если какое-либо ограничение совпадает, то оно возвращает набор значений. Одним из основных значений является контроллер.
Аннотации
Аннотация играет важную роль в настройке приложения Symfony. Аннотация упрощает конфигурацию, объявляя конфигурацию в самом кодировании. Аннотация — это не что иное, как предоставление метаинформации о классе, методах и свойствах. Маршрутизация широко использует аннотации. Несмотря на то, что маршрутизация может быть выполнена без аннотации, аннотация значительно упрощает маршрутизацию.
Ниже приведен пример аннотации.
/** * @Route(“/student/home”) */ public function homeAction() { // ... }
Концепции маршрутизации
Рассмотрим класс StudentController, созданный в проекте «student».
StudentController.php
// src/AppBundle/Controller/StudentController.php namespace AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class StudentController extends Controller { /** * @Route(“/student/home”) */ public function homeAction() { // ... } /** * @Route(“/student/about”) */ public function aboutAction() { } }
Здесь маршрутизация выполняется в два этапа. Если вы идете в / student / home , первый маршрут совпадает, затем выполняется homeAction () . В противном случае, если вы перейдете в / student / about , второй маршрут будет найден, а затем выполняется aboutAction () .
Добавление подстановочных знаков
Предположим, у вас есть нумерованный список записей о студентах с такими URL-адресами, как / student / 2 и / student / 3 для страниц 2 и 3 соответственно. Затем, если вы хотите изменить путь к маршруту, вы можете использовать форматы подстановочных знаков.
пример
// src/AppBundle/Controller/BlogController.php namespace AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class StudentController extends Controller { /** * @Route(“/student/{page}", name = “student_about”, requirements = {"page": "\d+"}) */ public function aboutAction($page) { // ... } }
Здесь \ d + является регулярным выражением, которое соответствует цифре любой длины.
Назначить заполнитель
Вы можете назначить значение заполнителя в маршрутизации. Это определяется следующим образом.
// src/AppBundle/Controller/BlogController.php namespace AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class StudentController extends Controller { /** * @Route(“/student/{page}", name = “student_about”, requirements = {"page": "\d+"}) */ public function aboutAction($page = 1) { // ... } }
Здесь, если вы перейдете к / student, маршрут student_about будет соответствовать, и $ page по умолчанию будет иметь значение 1.
Перенаправление на страницу
Если вы хотите перенаправить пользователя на другую страницу, используйте методы redirectToRoute () и redirect () .
public function homeAction() { // redirect to the "homepage" route return $this->redirectToRoute('homepage'); // redirect externally \return $this->redirect('http://example.com/doc'); }
Генерация URL
Чтобы сгенерировать URL, рассмотрите имя маршрута, имя студента и подстановочный знак, имена студентов, используемые в пути для этого маршрута. Полный список для создания URL-адреса определяется следующим образом.
class StudentController extends Controller { public function aboutAction($name) { // ... // /student/student-names $url = $this->generateUrl( ‘student_name’, array(‘name’ => ’student-names’) ); } }
StudentController
Рассмотрим простой пример маршрутизации в классе StudentController следующим образом.
StudentController.php
<?php namespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Response; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class StudentController { /** * @Route("/student/home") */ public function homeAction() { $name = 'Student details application'; return new Response( '<html><body>Project: '.$name.'</body></html>' ); } }
Теперь запросите URL «http: // localhost: 8000 / student / home», и он даст следующий результат.
Точно так же вы можете создать другой маршрут для aboutAction () .