2012-05-03 14 views
11

का उपयोग कर एक एकल नियंत्रक कार्रवाई के लिए कई यूआरएल ढांचा का उपयोग नियमित अभिव्यक्ति का उपयोग करते हुए एक भी नियंत्रक कार्रवाई के लिए कई url प्रतिमानों को परिभाषित करने के symfony2 के साथ संभव है कि है, इसलिए हम कई नियमों को परिभाषित करने की जरूरत नहीं है? अग्रिमsymfony2 नियमित अभिव्यक्ति

उत्तर

12

धन्यवाद आप आवश्यकताओं के साथ प्लेसहोल्डर मतलब है?

blog: 
    pattern: /blog/{page} 
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 
    requirements: 
     page: \d+ 

यहाँ आप एक प्लेसहोल्डर द्वारा परिभाषित कई मार्गों, एक ही नियंत्रक कार्रवाई करने के लिए जा नियमित अभिव्यक्ति द्वारा मान्य है।

संपादित करें:

यूआरएल के प्रत्येक भाग एक प्लेसहोल्डर हो सकता है।

blog: 
    pattern: /{type}/{page} 
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 
    requirements: 
     type: blog|articles 
     page: \d+ 
+0

@svassr जवाब – ilanco

+0

अद्यतन क्या हुआ अगर मैं प्रकार omittable करना चाहते हैं? उदाहरण के लिए आप: '/ पद/खेल/2',' पद/खेल', 'पद/2' के लिए मार्ग कैसे परिभाषित करेंगे। तो सामान्य मार्ग है: '/ पद/{श्रेणी}/{पृष्ठ}', लेकिन - जाहिर है - यह केवल डिफ़ॉल्ट मानों के साथ काम नहीं करता है। क्या सिमफनी को यह बताने का कोई तरीका है कि दूसरा पैरा स्ट्रिंग/int है या नहीं? –

24

एनोटेशन का उपयोग करते समय, आप कई मार्गों को परिभाषित कर सकते हैं। कि जैसा:

/** 
* @Route ("item1") 
* @Route ("item/2") 
* @Method("GET") 
*/ 
public function itemAction() { 

} 

मैं मार्गों के लिए संस्करण का उपयोग कर रहा 2.0.9

+2

यह वास्तव में दिलचस्प है, मैं संबंधित मार्ग सिर्फ एक _Action_ से पहले परिभाषित करने का विचार पसंद है, लेकिन मैं अपने सभी नियंत्रकों – svassr

+5

में मेरी रूटिंग नियम प्रसार आप शायद है के रूप में के बजाय केवल एक _routing.yml_ में सब कुछ रखना चाहते हैं ऐप/कंसोल खोलें, राउटर को न भूलें: अपने सभी मार्गों को देखने के लिए डीबग कमांड करें। यदि आप एनोटेशन का उपयोग करते हैं, तो आपको डिफ़ॉल्ट रूप से अपने मार्गों के लिए समझदार नाम मिलेंगे, इसलिए यह वास्तव में नियंत्रक को ढूंढना काफी आसान है। – cvaldemar

+1

जब आप एकाधिक बंडलों का उपयोग करते हैं तो सभी मार्गों को एक फ़ाइल में रखना संभव नहीं है (जब आप रूट को मुख्य ऐप 'रूटिंग.मिल' में संसाधन के रूप में शामिल करते हैं), तो यह वास्तव में रूटिंग के लिए तर्क नहीं है। एनोटेशन का उपयोग करना आसान है, आसान डीबग करने योग्य ('राउटर: डीबग') और कॉन्फ़िगर करने योग्य (उदाहरण के लिए आप अपना नाम सेट कर सकते हैं: '@ रूट ("/", name =" मुखपृष्ठ ")')। – Wirone

4

एनोटेशन उदाहरण पैरामीटर के साथ:

{{ path('shops_town') }} 
:

/** 
* @Route("/shops/{page}", name="shops") 
* @Route("/shops/town/{town}/{page}", name="shops_town") 
* @Route("/shops/department/{department}/{page}", name="shops_department") 
*/ 
public function shopsAction(Town $town = null, Department $department = null, $page = 1) 
{ ... } 

तो इस तरह टहनी में रूट तैयार

या

{{ path('shops_town', {'town': town.id}) }} 

या

{{ path('shops_department', {'department': department.id}) }} 
संबंधित मुद्दे