Symfony路由 Symfony控制器 Symfony视图引擎 路由将请求URI映射到特定控制器的方法。一般来说,任何URI都有以下三部分 - 主机名段 路径段 查询段 例如,在URI / URL中, http://www.CodingDict.com/index? q=data ,www.CodingDict.com 是主机名段,index是路径段,q = data是查询段。通常,路由会根据一组约束来检查页面段。如果任何约束匹配,则返回一组值。其中一个主要价值是控制器。 注释 注释在Symfony应用程序的配置中起着重要作用。注释通过在编码中声明配置来简化配置。注释只是提供有关类,方法和属性的元信息。路由广泛使用注释。尽管路由可以在没有注释的情况下完成,但注释很大程度上简化了路由。 以下是样本注释。 /** * @Route(“/student/home”) */ public function homeAction() { // ... } 路由概念 考虑在“学生”项目中创建的 StudentController 类。 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() { } } 这里,路由执行两个步骤。如果你去 /学生/ home ,第一条路线匹配,然后执行 homeAction() 。否则,如果您转到 / student / about ,则匹配第二条路线,然后执行 aboutAction() 。 添加通配符格式 考虑一下,你有一个分页的学生记录列表,其中第2页和第 3 页的URL分别为 / 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 考虑一个在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() 创建另一个路由。 Symfony控制器 Symfony视图引擎