मंगलवार, 23 फ़रवरी 2010

यूआरआई का मार्ग निर्धारण अथवा राउटिंग – कोड इग्नाइटर

सामान्यतया आपकी यूआरएल स्ट्रिंग और संगत कंट्रोलर क्लास/मेथड के मध्य एक से एक का संबंध होता है. यूआरआई के खंड सामान्यतया निम्नलिखित ढांचे अनुसरण करते हैं:

example.com/class/function/id/

कुछ परिस्थितियों में आप कभी इन संबंधों को बदलना चाहें ताकि किसी दूसरी क्लास/फ़ंग्शन को अनुरोध भेजा जा सके(बजाय संबंधित यूआरएल के) तो आप ऐसा कर सकते हैं. उदाहरण के लिये, आप अपने यूआरएलों का ढ़ांचा कुछ इस प्रकार बनाना चाहते हैं:

example.com/product/1/
example.com/product/2/
example.com/product/3/
example.com/product/4/

सामान्यतया यूआरएल का दूसरा खंड फ़ंग्शन के नाम के लिये आरक्षित होता है, पर इस उदाहरण में यह प्रोडक्ट आई डी है. अत: ऐसा करने के लिये कोड इग्नाइटर आपको यूआरआई हैंडलर को रिमैप करने की सुविधा देता है.

अपने स्वयं के राउटिंग नियम बनाना

राउटिंग के नियम आपकी application/config/routes.php फ़ाइल में परिभाषित होते हैं. इसमें आपको $route नाम का एक एरे मिलेगा जो कि आपको राउटिंग के मानदंड निर्धारित करने की सुविधा प्रदान करेगा. राउट्स को आप या तो wildcards से या फ़िर Regular Expressions के द्वारा निर्दिष्ट कर सकते हैं.

वाइल्ड कार्ड

एक सामान्य वाइल्डकार्ड राऊट कुछ ऐसा लग सकता है:

$route['product/:num'] = "catalog/product_lookup";

राउट्स में, एरे की "की" यूआरआई को रखती है वहीं एरे का मान गंत्वय का पता रखता है.  ऊपर के उदाहरण में यदि यूआरएल के पहले हिस्से में "product" शब्द तथा दूसरे हिस्से में नंबर पाया जाता है तो तो "catalog" क्लास तथा "product_lookup" फ़ंग्शन का प्रयोग किया जायेगा.

आप अक्षरों का मिलान करवा सकते हैं अथवा आप दो वाइल्ड कार्ड प्रकारों का प्रयोग कर सकते हैं:

:num
:any

:num  हमेशा उन्ही हिस्सों का मिलान करेगा जिनमें नंबर हैं
:any उन हिस्सों से मिलान करेगा जिनमें कोई भी अक्षर हो सकता है.

नोट: राउट हमेशा उसी क्रम में चलते हैं जिस क्रम में उन्हे परिभाषित किया गया होता है. उच्च श्रेणी के राउट हमेंशा निचले की अपेक्षा प्राथमिकता लेते हैं.

उदाहरण

यहां कुछ राउटिंग के उदाहरण दिये गये हैं:

$route['journals'] = "blogs";

एक यूआरएल जिसमें "journals" शब्द पहले खंड में होगा वह "blogs" क्लास में रिमैप कर दिया जायेगा.

$route['blog/joe'] = "blogs/users/34";

एक यूआरएल जिसमें "blog/joe" शब्द होगा वह "blogs" क्लास तथा "users" मेथड में रिमैप कर दिया जायेगा. इसका आईडी "34" सेट कर दिया जायेगा.

$route['product/:any'] = "catalog/product_lookup";

एक यूआरएल जिसमें "product" पहले खंड में हो तथा दूसरे खंड में कुछ भी हो, "catalog" क्लास और "product_lookup" फ़ंग्शन में रिमैप कर दिया जायेगा.

$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";

एक यूआरएल जिसमें पहले खंड में "product" हो तथा दूसरे में कुछ भी हो "catalog" क्लास तथा "product_look_by_id" मैथड में रिमैप कर दिया जायेगा. इसके साथ ही यह फ़ंग्शन से वैरिएबल का भी मिलान करेगा.

महत्वपूर्ण: इसमें तिर्यकों (slashes) का प्रयोग ना करें

रेगुलर एक्सप्रेशन

यदि आप चाहें तो आप अपने राउटिंग नियमों को परिभाषित करने के लिये रेगुलर एक्सप्रेशनों का उपयोग कर सकते हैं. आप किसी भी प्रकार का रेगुलर एक्सप्रेशन प्रयोग कर सकते हैं.

नोट:  यदि आप बैक रिफ़रेंस का प्रयोग कर रहे हैं तो आपको बैक स्लैश(तिर्यक) के चिन्ह की बजाय डालर के चिन्ह का प्रयोग करना चाहिये.

एक ठेठ RegEx राउट कुछ इस प्रकार दिखेगा.

$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";

ऊपर के उदाहरण में products/shirts/123 तरह का यूआरआई shirts कंट्रोलर क्लास तथा id_123 फ़ंग्शन को अनुरोध भेजेगा.

आप वाइल्ड कार्डों तथा रेगुलर एक्सप्रेशनों को मिलाकर भी उपयोग कर सकते हैं.

आरक्षित मार्ग

कुल दो आरक्षित राउट्स हैं:

$route['default_controller'] = 'welcome';

यह राउट यह बताता है कि यदि यूआरआई में कोई डाटा ना हो तो कौन कंट्रोलर क्लास को लोड करना है. ऐसा तब होगा जब लोग आपके रूट यूआरएल को लोड करेंगे. ऊपर के उदाहरण में "welcome" क्लास लोड होगी. आपको हमेशा एक डिफ़ाल्ट राउट बनाकर रखना चाहिये अन्यथा 404 पेज सामान्य अवस्था में दिखाई देगा.

$route['scaffolding_trigger'] = 'scaffolding';

यह राउट आपको एक गुप्त शब्द सेट करने की सुविधा प्रदान करता है. यह शब्द जब यूआरएल में उपस्थित होगा तो स्कैफ़ोल्डिंग को चालू कर देगा. अधिक जानकारी के लिये स्कैफ़ोल्डिंग पेज को पढ़ें.

महत्वपूर्ण:  आरक्षित राउट हमेशा किसी वाइल्ड कार्ड अथवा रेगुलर एक्स्प्रेशन के पहले आने चाहिये.

कोई टिप्पणी नहीं:

एक टिप्पणी भेजें

इस ब्लाग में प्रकाशित सामग्री कापीराईट द्वारा सुरक्षित है. बिना अनुमति इसका किसी भी प्रकार से अन्यत्र प्रयोग/प्रकाशन मूल रूप में/बदल कर उपयोग नही किया जा सकता है.

हिंदी में तकनीकी लेखन को प्रोत्साहित करें

please donate अभी तक वेब डेवलपमेंट अथवा प्रोग्रामिंग आदि से संबंधित जानकारी पर अंग्रेजी का एकाधिकार रहा है. भारत में इतने आई टी गुरू होने के बावजूद भारतीय भाषाओं में इस विषय पर लेखन नगण्य है. इस ब्लाग के माध्यम से मैं हिन्दी भाषिओं तक वेब डेवलपमेंट का ज्ञान पहुंचाने की कोशिश कर रहा हूं. अत: आप सभी से अनुरोध है कि हिंदी में तकनीकी लेखन के लिये सहयोग करें
मैं वेबसाइटें भी बनाता हूं. यदि आपको बनवानी हो तो बताएं.

ARCHIVES

इस ब्लॉग में खोजें

फ़ॉलोअर