Symfony - Enrutamiento

Los mapas de enrutamiento solicitan URI al método de un controlador específico. En general, cualquier URI tiene las siguientes tres partes:

  • Segmento de nombre de host
  • Segmento de ruta
  • Segmento de consulta

Por ejemplo, en URI / URL, http://www.tutorialspoint.com/index?q=data, www.tutorialspoint.comes el segmento del nombre de host, el índice es el segmento de la ruta y q = data es el segmento de la consulta. Generalmente, el enrutamiento compara el segmento de la página con un conjunto de restricciones. Si alguna restricción coincide, devuelve un conjunto de valores. Uno de los principales valores es el controlador.

Anotaciones

La anotación juega un papel importante en la configuración de la aplicación Symfony. La anotación simplifica la configuración al declarar la configuración en la propia codificación. La anotación no es más que proporcionar metainformación sobre clases, métodos y propiedades. El enrutamiento utiliza ampliamente la anotación. Aunque el enrutamiento se puede realizar sin anotación, la anotación simplifica el enrutamiento en gran medida.

A continuación se muestra una anotación de muestra.

/** 
   * @Route(“/student/home”) 
*/ 
public function homeAction() { 
   // ... 
}

Conceptos de enrutamiento

Considere la clase StudentController creada en el proyecto "estudiante".

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() { 
   } 
}

Aquí, el enrutamiento realiza dos pasos. Si vas a/student/home, la primera ruta coincide luego homeAction()es ejecutado. De lo contrario, si va a/student/about, la segunda ruta coincide y luego aboutAction() es ejecutado.

Adición de formatos comodín

Considere que tiene una lista paginada de registros de estudiantes con URL como / student / 2 y / student / 3 para la página 2 y 3 correspondientemente. Luego, si desea cambiar la ruta de la ruta, puede usar formatos comodín.

Ejemplo

// 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) { 
      // ... 
   } 
}

Aquí el \d+ es una expresión regular que coincide con un dígito de cualquier longitud.

Asignar marcador de posición

Puede asignar un valor de marcador de posición en el enrutamiento. Se define como sigue.

// 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) { 
      // ... 
   } 
}

Aquí, si vas a / student, el student_about route coincidirá y $page tendrá un valor predeterminado de 1.

Redirigir a una página

Si desea redirigir al usuario a otra página, utilice la redirectToRoute() y redirect() métodos.

public function homeAction() { 
   // redirect to the "homepage" route 
   return $this->redirectToRoute('homepage');  
   
   // redirect externally 
   \return $this->redirect('http://example.com/doc'); 
}

Generando URL

Para generar una URL, considere un nombre de ruta, student_name y nombre comodín, student-namesutilizado en el camino de esa ruta. La lista completa para generar una URL se define a continuación.

class StudentController extends Controller { 
   public function aboutAction($name) { 
      // ...  
      // /student/student-names 
      $url = $this->generateUrl( 
         ‘student_name’, 
         array(‘name’ =>
         ’student-names’) 
      ); 
   } 
}

StudentController

Considere un ejemplo simple de enrutamiento en la clase StudentController de la siguiente manera.

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>' 
      ); 
   } 
}

Ahora, solicite la URL,”http://localhost:8000/student/home” y produce el siguiente resultado.

Del mismo modo, puede crear otra ruta para aboutAction() también.