2012-07-06 12 views
15

सिंगल सिम्फनी रूटिंग में एकाधिक पैटर्न कैसे बनाएं?सिंगल सिम्फनी रूटिंग में एकाधिक पैटर्न

आम तौर पर हम है

blog: 
    pattern: /
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 

के रूप में एक मार्ग यह दो मार्ग पैटर्न के लिए संभव है?

कुछ

blog: 
    #Below pattern to match with '/' or '/index'  
    pattern: {/ , /index} 
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 

उत्तर

21

आप Symfony2 का उपयोग कर रहे हैं? आप कर रहे हैं और अपने YML या एक्सएमएल के बजाय रूट करने के लिए एनोटेशन का उपयोग कर सकते हैं तो यह इन पंक्तियों के साथ परिभाषित कई मार्गों के लिए संभव है:

/** 
* @Route("/"); 
* @Route("/home"); 
*/ 

तो फिर तुम कार्रवाई विधि नकल करने की जरूरत नहीं है।

+0

यह 2017 है: क्या रूटिंग.मैमल के साथ ऐसा करने के लिए एक सिम्फनी 3 तरीका है? –

20

सबसे आसान तरीका है की तरह ब्लॉक dublicate और 2 मार्गों बनाना है।

blog: 
    pattern: /
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 

blog_index: 
    pattern: /index 
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 

तो यदि आपको इसकी आवश्यकता हो तो आपके पास दोनों को अपने रास्ते में उपयोग करने की संभावना है।

Here आप अपने रूटिंग में रेगेक्स का उपयोग करने के लिए एक और पोस्ट देख सकते हैं। शायद आप एक साधारण रेगेक्स लिख सकते हैं जो जांचता है कि इंडेक्स सेट है या नहीं।

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

आप एनोटेशन के साथ काम क्या मैं तो पसंद करते हैं तो आप इस तरह अपने वर्ग कुछ अधिक एक से अधिक मार्ग लिख सकते हैं:

/** 
* @Route("/"); 
* @Route("/home"); 
*/ 
+0

क्या यह विभिन्न मानकों के साथ काम करता है? यदि हां कैसे? –

1

बस जॉन के जवाब में जोड़ने के लिए:

/** 
* @Route("/", name="route_name_1", options={"expose"=true}) 
* @Route("/{id}", name="route_name_2", options={"expose"=true}) 
* @Method("GET") 
* @Template() 
*/ 

इस तरह से मैं एक विधि और दो मार्गों है:

मैं इसे FOSJsRoutingBundle साथ एक बहुत का उपयोग करें।

बस डिफ़ॉल्ट $ आईडी मान सेट करने के लिए याद:

public function indexAction($id = null) 
{ 
    ... 
} 
7

जब YAML मार्गों का उपयोग कर आप भी संदर्भ के लिए एक मौजूदा मार्ग परिभाषा node anchors अभिव्यक्ति सिंटैक्स का उपयोग कर सकते हैं।

& एंकर से पहली घटना निर्दिष्ट करता, * संदर्भ के लंगर को निर्दिष्ट, <<Symfony yaml parser बताता है निर्दिष्ट नोड विलय करने।

blog: &blog 
    path:/
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 

blog_index: 
    <<: *blog 
    path: /index 

blog_page: 
    <<: *blog 
    path: /blog 

वैकल्पिक रूप से आप एक route attribute value पर एंकर का उपयोग कर सकते हैं।

blog: 
    path:/
    defaults: &blog_defaults 
    _controller: AcmeBlogBundle:Blog:index 
    page: 1 

blog_index: 
    path: /index 
    defaults: *blog_defaults 

blog_page: 
    path: /blog 
    defaults: *blog_defaults 

हालांकि गरीब एसईओ सामग्री डुप्लिकेट के कारण को रोकने के लिए, यह बजाय एक redirect उपयोग करने के लिए सिफारिश की है।

blog: 
    path:/
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 

blog_index: 
    path: /index 
    defaults: &blog_redirect 
    _controller: FrameworkBundle:Redirect:redirect 
    route: blog 
    permanent: true 

blog_page: 
    path: /blog 
    defaults: *blog_redirect