Учебники

Symfony – Маршрутизация

Маршрутизация отображает 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 () .