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.