📅  最后修改于: 2020-10-19 03:16:08             🧑  作者: Mango
路由将请求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类。
// 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分别对应于第2页和第3页的/ student / 2和/ student / 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,请考虑该路由的路径中使用的路由名称, student_name和通配符名称, student-name 。生成URL的完整清单定义如下。
class StudentController extends Controller {
public function aboutAction($name) {
// ...
// /student/student-names
$url = $this->generateUrl(
‘student_name’,
array(‘name’ =>
’student-names’)
);
}
}
考虑如下一个在StudentController类中进行路由的简单示例。
Project: '.$name.'
现在,请求URL “ http:// localhost:8000 / student / home” ,它将产生以下结果。
同样,您也可以为aboutAction()创建另一个路由。