Symfony - Yönlendirme

Yönlendirme haritaları, belirli bir denetleyicinin yöntemine URI talep eder. Genel olarak, herhangi bir URI aşağıdaki üç bölümden oluşur:

  • Ana bilgisayar adı segmenti
  • Yol parçası
  • Sorgu segmenti

Örneğin, URI / URL'de, http://www.tutorialspoint.com/index?q=data, www.tutorialspoint.comana bilgisayar adı bölümü, dizin yol bölümü ve q = veri sorgu bölümüdür. Genel olarak yönlendirme, sayfa segmentini bir dizi kısıtlamaya göre kontrol eder. Herhangi bir sınırlama eşleşirse, bir dizi değer döndürür. Ana değerlerden biri kontrolördür.

Ek açıklamalar

Ek açıklama, Symfony uygulamasının konfigürasyonunda önemli bir rol oynar. Ek açıklama, konfigürasyonu kodlamanın kendisinde bildirerek konfigürasyonu basitleştirir. Ek açıklama, sınıf, yöntemler ve özellikler hakkında meta bilgi vermekten başka bir şey değildir. Yönlendirme, ek açıklamayı yoğun bir şekilde kullanır. Yönlendirme, açıklama olmadan yapılabilse de, açıklama, yönlendirmeyi büyük ölçüde basitleştirir.

Aşağıda örnek bir açıklama yer almaktadır.

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

Yönlendirme Kavramları

"Öğrenci" projesinde oluşturulan StudentController sınıfını düşünün .

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

Burada yönlendirme iki adımı gerçekleştirir. Eğer gidersen/student/homeilk rota eşleşir, sonra homeAction()Idam edildi. Aksi takdirde, eğer gidersen/student/about, ikinci rota eşleşir ve ardından aboutAction() Idam edildi.

Joker Karakter Biçimleri Ekleme

Buna karşılık gelen sayfa 2 ve 3 için / öğrenci / 2 ve / öğrenci / 3 gibi URL'lere sahip sayfalara ayrılmış bir öğrenci kayıtları listeniz olduğunu düşünün . Daha sonra, rotanın yolunu değiştirmek isterseniz, joker karakter formatlarını kullanabilirsiniz.

Misal

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

Burada \d+ herhangi bir uzunluktaki bir rakamla eşleşen normal bir ifadedir.

Yer Tutucu Ata

Yönlendirmede bir yer tutucu değeri atayabilirsiniz. Aşağıdaki gibi tanımlanır.

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

Burada / öğrenci konumuna giderseniz student_about route eşleşecek ve $page 1 değerine varsayılan olacaktır.

Bir Sayfaya Yönlendirme

Kullanıcıyı başka bir sayfaya yönlendirmek istiyorsanız, redirectToRoute() ve redirect() yöntemler.

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

URL'ler oluşturma

Bir URL oluşturmak için bir yol adı düşünün, student_name ve joker karakter adı, student-nameso rotanın yolunda kullanılır. Bir URL oluşturmak için tam liste aşağıdaki gibi tanımlanır.

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

StudentController

StudentController sınıfında aşağıdaki gibi yönlendirme için basit bir örnek düşünün.

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

Şimdi url'yi isteyin,”http://localhost:8000/student/home” ve aşağıdaki sonucu verir.

Benzer şekilde, başka bir rota oluşturabilirsiniz. aboutAction() yanı sıra.