Symfony - Routing
Le mappe di routing richiedono l'URI al metodo di un controller specifico. In generale, qualsiasi URI ha le seguenti tre parti:
- Segmento del nome host
- Segmento di percorso
- Segmento di query
Ad esempio, in URI / URL, http://www.tutorialspoint.com/index?q=data, www.tutorialspoint.comè il segmento del nome host, index è il segmento del percorso e q = data è il segmento della query. In genere, il routing controlla il segmento di pagina rispetto a una serie di vincoli. Se un qualsiasi vincolo corrisponde, restituisce un insieme di valori. Uno dei valori principali è il controller.
Annotazioni
L'annotazione gioca un ruolo importante nella configurazione dell'applicazione Symfony. L'annotazione semplifica la configurazione dichiarando la configurazione nella codifica stessa. L'annotazione non è altro che fornire meta informazioni su classi, metodi e proprietà. Il routing utilizza ampiamente l'annotazione. Anche se il routing può essere eseguito senza annotazioni, l'annotazione semplifica notevolmente il routing.
Di seguito è riportata un'annotazione di esempio.
/**
* @Route(“/student/home”)
*/
public function homeAction() {
// ...
}
Concetti di instradamento
Considera la classe StudentController creata nel progetto "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() {
}
}
Qui, il routing esegue due passaggi. Se vai a/student/home, il primo percorso viene quindi abbinato homeAction()viene eseguito. Altrimenti, se vai a/student/about, viene abbinato il secondo percorso e quindi aboutAction() viene eseguito.
Aggiunta di formati di caratteri jolly
Considera, hai un elenco impaginato di record degli studenti con URL come / student / 2 e / student / 3 per le pagine 2 e 3 corrispondentemente. Quindi, se desideri modificare il percorso del percorso, puoi utilizzare i formati jolly.
Esempio
// 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) {
// ...
}
}
Qui, il \d+ è un'espressione regolare che corrisponde a una cifra di qualsiasi lunghezza.
Assegna segnaposto
È possibile assegnare un valore segnaposto nel routing. È definito come segue.
// 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) {
// ...
}
}
Qui, se vai a / student, il file student_about route corrisponderà a e $page il valore predefinito sarà 1.
Reindirizzamento a una pagina
Se vuoi reindirizzare l'utente a un'altra pagina, usa il redirectToRoute() e redirect() metodi.
public function homeAction() {
// redirect to the "homepage" route
return $this->redirectToRoute('homepage');
// redirect externally
\return $this->redirect('http://example.com/doc');
}
Generazione di URL
Per generare un URL, considera un nome di percorso, student_name e il nome del carattere jolly, student-namesutilizzato nel percorso per quel percorso. L'elenco completo per la generazione di un URL è definito come segue.
class StudentController extends Controller {
public function aboutAction($name) {
// ...
// /student/student-names
$url = $this->generateUrl(
‘student_name’,
array(‘name’ =>
’student-names’)
);
}
}
StudentController
Considera un semplice esempio di instradamento nella classe StudentController come segue.
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>'
);
}
}
Ora, richiedi l'URL,”http://localhost:8000/student/home” e produce il seguente risultato.
Allo stesso modo, puoi creare un altro percorso per aboutAction() anche.