सिम्फनी - रूटिंग

रूटिंग मैप्स एक विशिष्ट नियंत्रक की विधि के लिए URI का अनुरोध करते हैं। सामान्य तौर पर, किसी भी URI के निम्नलिखित तीन भाग होते हैं -

  • होस्टनाम खंड
  • पथ खंड
  • क्वेरी खंड

उदाहरण के लिए, URI / URL में, http://www.tutorialspoint.com/index?q=data, www.tutorialspoint.comमेजबान नाम खंड है, सूचकांक पथ खंड है और q = डेटा क्वेरी खंड है। आमतौर पर, रूटिंग बाधाओं के एक सेट के खिलाफ पेज सेगमेंट की जांच करता है। यदि कोई बाधा मेल खाती है, तो यह मूल्यों का एक सेट लौटाता है। मुख्य मूल्य में से एक नियंत्रक है।

एनोटेशन

एनोटेशन सिम्फनी एप्लिकेशन के कॉन्फ़िगरेशन में एक महत्वपूर्ण भूमिका निभाता है। एनोटेशन स्वयं कोडिंग में कॉन्फ़िगरेशन की घोषणा करके कॉन्फ़िगरेशन को सरल करता है। एनोटेशन और कुछ नहीं बल्कि वर्ग, विधियों और गुणों के बारे में मेटा जानकारी प्रदान करता है। रूटिंग बड़े पैमाने पर एनोटेशन का उपयोग करता है। भले ही अनुमापन एनोटेशन के बिना किया जा सकता है, लेकिन एनोटेशन काफी हद तक रूटिंग को सरल करता है।

निम्नलिखित एक नमूना एनोटेशन है।

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

रूटिंग अवधारणाओं

"छात्र" परियोजना में बनाए गए छात्रकंट्रोलर वर्ग पर विचार करें ।

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

यहां, राउटिंग दो चरण करती है। अगर आप जायें तो/student/home, फिर पहले मार्ग का मिलान किया जाता है homeAction()निष्पादित किया जाता है। अन्यथा, यदि आप जाते हैं/student/aboutदूसरे मार्ग का मिलान किया जाता है और फिर aboutAction() निष्पादित किया जाता है।

वाइल्डकार्ड स्वरूप जोड़ना

गौर करें, आपके पास पृष्ठ 2 और 3 के लिए / जैसे / छात्र / 2 और / छात्र / 3 के URL के साथ छात्र रिकॉर्ड की एक पृष्ठांकित सूची है । फिर, यदि आप मार्ग का मार्ग बदलना चाहते हैं, तो आप वाइल्डकार्ड स्वरूपों का उपयोग कर सकते हैं।

उदाहरण

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

यहां ही \d+ एक नियमित अभिव्यक्ति है जो किसी भी लम्बाई के अंकों से मेल खाती है।

प्लेसहोल्डर असाइन करें

आप रूटिंग में प्लेसहोल्डर मान असाइन कर सकते हैं। इसे निम्नानुसार परिभाषित किया गया है।

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

यहां, यदि आप / छात्र के पास जाते हैं, तो student_about route मैच होगा और $page 1 के मान के लिए डिफ़ॉल्ट होगा।

पृष्ठ पर पुनर्निर्देशित करना

यदि आप उपयोगकर्ता को किसी अन्य पृष्ठ पर पुनर्निर्देशित करना चाहते हैं, तो उपयोग करें redirectToRoute() तथा redirect() तरीकों।

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

जनरेटिंग यूआरएल

URL जनरेट करने के लिए, रूट नाम पर विचार करें, student_name और वाइल्डकार्ड नाम, student-namesउस मार्ग के लिए उपयोग किया जाता है। URL उत्पन्न करने के लिए पूरी सूची निम्नानुसार परिभाषित की गई है।

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

StudentController

निम्नानुसार छात्रकंट्रोलर वर्ग में रूटिंग के लिए एक सरल उदाहरण पर विचार करें।

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

अब, url का अनुरोध करें,”http://localhost:8000/student/home” और यह निम्नलिखित परिणाम उत्पन्न करता है।

इसी तरह, आप के लिए एक और मार्ग बना सकते हैं aboutAction() भी।