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.