2010-06-19 12 views
8

मैं एक आवश्यकता को कैसे लागू कर सकता हूं कि एक मार्ग में एक पैरामीटर एक स्ट्रिंग हो?सिम्फनी मार्ग पैरामीटर आवश्यकता प्रतिबंध

मार्ग को देखते हुए

my_foobar_route: यूआरएल:/उदाहरण/मार्ग /: S1 /: आईडी आवश्यकताएं: {आईडी: \ d +}

किसी को भी कैसे करने के लिए परम एस 1 के लिए मजबूर करने की मुझे याद दिलाने कर सकते हैं एक स्ट्रिंग हो?

उत्तर

12

तुम सिर्फ एक उपयुक्त नियमित अभिव्यक्ति देने की आवश्यकता दूसरा नियमित अभिव्यक्ति के आसपास जोड़ा उद्धरण चिह्न; वाईएएमएल पैरामीटर की सरणी के रूप में [...] व्याख्या करता है। धन्यवाद @chiborg :-)

+1

यह तब तक काम नहीं करेगा जब तक आप उद्धरण में रेगेक्स नहीं डालते। – chiborg

+0

संपादित, धन्यवाद। हमेशा '[]' को वाईएएमएल सरणी के रूप में व्याख्या करने के बारे में भूल जाओ, रूटिंग में मेरे सामान्य नियमित अभिव्यक्ति लगभग हमेशा \ \ d + ';-) – richsage

0

यूआरएल के माध्यम से जो कुछ भी आता है वह एक स्ट्रिंग है - इससे कोई भी आवश्यकता मजबूत है, आपको कुछ भी करने की आवश्यकता नहीं है, आपका पैरामीटर पहले से ही एक स्ट्रिंग है। शायद आप एक विशेष रूप से स्वरूपित स्ट्रिंग चाहते हैं?

my_foobar_route: 
    url: /example/routing/:s1/:id 
    requirements: 
    id: \d+ 
    s1: "[a-zA-Z]+" 

संपादित:

4

आप परवाह नहीं है तो क्या स्ट्रिंग है या यदि आप पहले से नहीं जानता कि यह क्या शामिल होंगे, निम्न प्रयास करें:

my_foobar_route: 
    url: /example/routing/:s1/:id 
    requirements: 
    id: \d+ 
    s1: "[^/]+" 

इस के अलावा सभी पात्रों की अनुमति देगा '/' वर्ण जो पैरामीटर के लिए विभाजक के रूप में प्रयोग किया जाता है। अभिव्यक्ति

my_foobar_route: 
    url: /example/routing/:s1/:id 
    requirements: 
    id: \d+ 
    s1: "[^/]{3,}" 

आप स्ट्रिंग को कम से कम तीन वर्ण लंबे होने के लिए मजबूर कर सकते हैं।

उद्धरणों में स्क्वायर ब्रैकेट के साथ Regexes डालना न भूलें! यदि आप उन्हें भूल जाते हैं, तो मार्गों के लिए वाईएएमएल पार्सर उन्हें सरणी अभिव्यक्ति के रूप में व्याख्या करेगा।

संबंधित मुद्दे