खोज…
परिचय
एक रूट एक नियंत्रक वर्ग में एक कार्रवाई (फ़ंक्शन) के लिए एक URL को मैप करने जैसा है। निम्नलिखित विषय मार्गों को बनाने पर ध्यान केंद्रित करेगा, या तो YAML या एनोटेशन का उपयोग करते हुए एक मार्ग के माध्यम से नियंत्रक वर्ग को पैरामीटर पारित करना।
टिप्पणियों
यह देखने के लिए उपयोगी है कि सिम्फनी फ्रेमवर्क द्वारा क्या उत्पन्न होता है, यह एक विशिष्ट एप्लिकेशन के सभी मार्गों को देखने के लिए उपकरण प्रदान करता है।
सिम्फनी डॉक्टर से , एक शेल में उपयोग करें:
php bin/console debug:router
रूटिंग मेनू में, आप फ्रेमवर्क प्रोफाइलर में सभी संबंधित मार्गों को देख सकते हैं:
YAML का उपयोग कर रूटिंग
रूटिंग कॉन्फ़िगरेशन आपके app/config/config.yml
फ़ाइल में शामिल है, डिफ़ॉल्ट रूप से app/config/routing.yml
फ़ाइल।
वहां से आप एक बंडल में अपने स्वयं के रूटिंग कॉन्फ़िगरेशन से लिंक कर सकते हैं
# app/config/routing.yml
app:
resource: "@AppBundle/Resources/config/routing.yml"
इसमें कई अनुप्रयोग वैश्विक मार्ग भी हो सकते हैं।
अपने स्वयं के बंडल में आप कॉन्फ़िगर कर सकते हैं, ऐसे मार्ग जो दो उद्देश्यों की सेवा करते हैं:
- एक अनुरोध के खिलाफ मिलान, जैसे कि अनुरोध के लिए सही कार्रवाई कहा जाता है।
- नाम और मार्ग मापदंडों से एक URL उत्पन्न करना।
नीचे एक उदाहरण YAML मार्ग विन्यास है:
# src/AppBundle/Resources/config/routing.yml
my_page:
path: /application/content/page/{parameter}
defaults:
_controller: AppBundle:Default:myPage
parameter: 42
requirements:
parameter: '\d+'
methods: [ GET, PUT ]
condition: "request.headers.get('User-Agent') matches '/firefox/i'"
मार्ग का नाम my_page
, और अनुरोध AppBundle
जाने पर AppBundle
में DefaultController
के myPageAction
को कॉल करता है। इसमें एक डिफ़ॉल्ट मान के साथ एक पैरामीटर, नामित parameter
। मान केवल तब मान्य होता है जब वह regex \d+
मेल खाता है। इस मार्ग के लिए, केवल HTTP तरीके GET
और PUT
स्वीकार किए जाते हैं। जब तक उपयोगकर्ता-एजेंट हेडर फ़ायरफ़ॉक्स से मेल नहीं खाता है, तो condition
उदाहरण में एक अभिव्यक्ति है। आप अभिव्यक्ति में जरूरत पड़ने वाले दो चर का उपयोग करके अभिव्यक्ति में किसी भी जटिल तर्क को कर सकते हैं: context
(RequestContext) और request
(सिम्फनी अनुरोध)।
10 के पैरामीटर मान के साथ एक उत्पन्न मार्ग /application/content/page/10
तरह लग सकता है।
एनोटेशन का उपयोग करके रूटिंग
रूटिंग कॉन्फ़िगरेशन आपके app/config/config.yml
फ़ाइल में शामिल है, डिफ़ॉल्ट रूप से app/config/routing.yml
फ़ाइल।
वहां से आप उन नियंत्रकों से लिंक कर सकते हैं, जिन्होंने रूटिंग कॉन्फ़िगरेशन को एनोटेट किया है:
# app/config/routing.yml
app:
resource: "@AppBundle/Controller"
type: annotation
अपने स्वयं के बंडल में आप कॉन्फ़िगर कर सकते हैं, ऐसे मार्ग जो दो उद्देश्यों की सेवा करते हैं:
- एक अनुरोध के खिलाफ मिलान, जैसे कि अनुरोध के लिए सही कार्रवाई कहा जाता है।
- नाम और मार्ग मापदंडों से एक URL उत्पन्न करना।
नीचे एक उदाहरण एनोटेट मार्ग विन्यास है:
// src/AppBundle/Controller/DefaultController.php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
/**
* @Route("/application")
*/
class DefaultController extends Controller {
/**
* @Route("/content/page/{parameter}",
* name="my_page",
* requirements={"parameter" = "\d+"},
* defaults={"parameter" = 42})
* @Method({"GET", "PUT"})
*/
public function myPageAction($parameter)
{
// ...
}
}
नियंत्रक को उपसर्ग मार्ग के साथ एनोटेट किया जाता है, जैसे कि इस नियंत्रक में कोई भी कॉन्फ़िगर किया गया मार्ग उपसर्ग का उपयोग करके पूर्व निर्धारित किया जाएगा।
कॉन्फ़िगर किए गए मार्ग का नाम my_page
, और अनुरोध किए जाने पर myPageAction
फ़ंक्शन को कॉल करता है। इसमें एक डिफ़ॉल्ट मान के साथ एक पैरामीटर, नामित parameter
। मान केवल तब मान्य होता है जब वह regex \d+
मेल खाता है। इस मार्ग के लिए, केवल HTTP तरीके GET
और PUT
स्वीकार किए जाते हैं।
ध्यान दें कि फंक्शन पैरामीटर के रूप में पैरामीटर को एक्शन में इंजेक्ट किया जाता है।
10 के पैरामीटर मान के साथ एक उत्पन्न मार्ग /application/content/page/10
तरह लग सकता है।
पावरफुल रेस्ट रूट्स
परंपरागत रूप से, आप रूटिंग कंपोनेंट के साथ अनुरोध को मैप करने के लिए राउटिंग का उपयोग कर सकते हैं जिन्होंने HttpFoundation Component द्वारा रिक्वेस्ट और रिस्पांस पैरामीटर संभाला है।
इसके अतिरिक्त, रूटिंग घटक की डिफ़ॉल्ट फ़ंक्शंस को विस्तारित करने के लिए FOSRestBundle का उपयोग करके एक कस्टम रूट पैरामीटर बनाया जा सकता है।
यह REST रूट बनाने के लिए उपयोगी है, यह निर्दिष्ट करने के लिए वास्तव में उपयोगी है कि अनुरोध (और प्रतिक्रिया) में XML या json फ़ाइल जैसे संरचित डेटा को कैसे सुरक्षित किया जाए।
अधिक जानकारी और विशेष रूप से इस एनोटेशन के लिए FOSRestBundle Doc देखें:
use FOS\RestBundle\Controller\Annotations\FileParam;
/**
* @FileParam(
* name="",
* key=null,
* requirements={},
* default=null,
* description="",
* strict=true,
* nullable=false,
* image=false
* )
*/