Symfony - Perutean

Peta perutean meminta URI ke metode pengontrol tertentu. Secara umum, setiap URI memiliki tiga bagian berikut -

  • Segmen nama host
  • Segmen jalur
  • Segmen kueri

Misalnya, di URI / URL, http://www.tutorialspoint.com/index?q=data, www.tutorialspoint.comadalah segmen nama host, indeks adalah segmen jalur dan q = data adalah segmen kueri. Umumnya, perutean memeriksa segmen halaman terhadap sekumpulan batasan. Jika ada batasan yang cocok, maka itu mengembalikan satu set nilai. Salah satu nilai utamanya adalah pengontrol.

Anotasi

Anotasi memainkan peran penting dalam konfigurasi aplikasi Symfony. Annotation menyederhanakan konfigurasi dengan mendeklarasikan konfigurasi dalam pengkodean itu sendiri. Anotasi tidak lain adalah memberikan informasi meta tentang kelas, metode, dan properti. Perutean menggunakan anotasi secara ekstensif. Meskipun perutean dapat dilakukan tanpa anotasi, anotasi sangat menyederhanakan perutean.

Berikut adalah contoh anotasi.

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

Konsep Perutean

Pertimbangkan kelas StudentController yang dibuat dalam proyek "siswa".

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

Di sini, perutean melakukan dua langkah. Jika Anda pergi ke/student/home, rute pertama akan dicocokkan homeAction()dieksekusi. Jika tidak, Jika Anda pergi ke/student/about, rute kedua dicocokkan lalu aboutAction() dieksekusi.

Menambahkan Format Wildcard

Pertimbangkan, Anda memiliki daftar catatan siswa yang diberi nomor halaman dengan URL seperti / siswa / 2 dan / siswa / 3 untuk halaman 2 dan 3 yang sesuai. Kemudian, jika Anda ingin mengubah jalur rute, Anda dapat menggunakan format karakter pengganti.

Contoh

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

Di sini \d+ adalah ekspresi reguler yang cocok dengan digit berapa pun panjangnya.

Tetapkan Placeholder

Anda dapat menetapkan nilai placeholder dalam perutean. Ini didefinisikan sebagai berikut.

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

Di sini, jika Anda pergi ke / student, file student_about route akan cocok dan $page akan default ke nilai 1.

Mengalihkan ke Halaman

Jika Anda ingin mengarahkan pengguna ke halaman lain, gunakan redirectToRoute() dan redirect() metode.

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

Menghasilkan URL

Untuk menghasilkan URL, pertimbangkan nama rute, student_name dan nama wildcard, student-namesdigunakan di jalur untuk rute itu. Daftar lengkap untuk menghasilkan URL didefinisikan sebagai berikut.

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

StudentController

Pertimbangkan contoh sederhana untuk perutean di kelas StudentController sebagai berikut.

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

Sekarang, minta url,”http://localhost:8000/student/home” dan itu menghasilkan hasil sebagai berikut.

Demikian pula, Anda dapat membuat rute lain untuk aboutAction() demikian juga.