2009-08-17 23 views
5

मैं सीआई के साथ एक ईकॉमर्स वेबसाइट विकसित कर रहा हूं जिसमें उत्पाद श्रेणियां और उत्पाद हैं। मैं यूआरएल को रूट करना चाहता हूं ताकि यह उत्पाद नियंत्रक के पास जा सके, फिर पहले सेगमेंट के लिए getCategoryByName फ़ंक्शन चलाएं, फिर दूसरे सेगमेंट के लिए getProductByName चलाएं। यहाँ मैं क्या है:कोडइग्निटर रूटिंग

 
URL: 
products/docupen/rc805 
 
routes.php: 
$route['products/([a-z]+)'] = "products/getCategoryByName/$1"; 
$route['products/([a-z]+)/([a-z0-9]+)'] = "products/$1/getProductByName/$2"; 

लेकिन इसके काम नहीं कर रहा। "डॉक्यूपेन" श्रेणी है, और "आरसी 805" उत्पाद है।

अग्रिम धन्यवाद।


आपकी मदद के लिए सभी को धन्यवाद। मुझे जो चाहिए वह मेरे साथ समाप्त हुआ।

 
$route['products/:any/:num'] = "products/getProductByID"; 
$route['products/:any/:any'] = "products/getProductByName"; 
$route['products/:any'] = "products/getCategoryByName"; 

उत्तर

11

मेरा उत्तर कॉलिन के उत्तर पर थोड़ा सा बनाता है।

जब मैंने कोडइग्निटर में मार्गों के साथ खेला, तो मैं इस निष्कर्ष पर पहुंचा कि मार्गों का क्रम महत्वपूर्ण था। जब यह पहला वैध मार्ग पाता है तो यह सूची में अन्य मार्ग नहीं करेगा। अगर इसे कोई वैध मार्ग नहीं मिलता है तो यह डिफ़ॉल्ट मार्ग को संभालेगा।

$route['default_controller'] = "main"; 
$route['main/:any'] = "main"; 
$route['events/:any'] = "main/events"; 
$route['search/:any'] = "main/search"; 
$route['events'] = "main/events"; 
$route['search'] = "main/search"; 
$route[':any'] = "main"; 

अगर मैं में प्रवेश किया "http://localhost/index.php/search/1234/4321" यह मुख्य/खोज के लिए रूट किया जाएगा और मैं तो $this->uri->segment(2); उपयोग कर सकते हैं 1234 पुनः प्राप्त करने के:

मेरे मार्गों है कि मैं अपने विशेष परियोजना के लिए के साथ चारों ओर खेला इस प्रकार के रूप में काम ।

अपने परिदृश्य में मैं कोशिश करेगा (क्रम बहुत महत्वपूर्ण है):

$route['products/:any/:any'] = "products/getProductByName"; 
$route['products/:any'] = "products/getCategoryByName"; 

मैं जिस तरह से आप चाहते थे (products/$1/getProductByName/$2) रूट करने के लिए पर्याप्त जानकारी नहीं है, लेकिन मुझे यकीन है कि आप कैसे बना सकते हैं नहीं कर रहा हूँ यूआरआई के इस विशेष रूप को संभालने के लिए एक नियंत्रक। अपने नियंत्रक में कॉलिन द्वारा उल्लिखित $this->uri->segment(n); कथन का उपयोग करके, आप जो भी चाहते हैं उसे करने में सक्षम होना चाहिए।

5

आप URI class का उपयोग अपने url से "docupen" और "rc805" खंडों को पुनः प्राप्त करने चाहिए। फिर आप उन मूल्यों का उपयोग कर सकते हैं जो आपको चाहिए। तब

$category = $this->uri->segment(2); //docupen 
$product = $this->uri->segment(3); //rc805 

:

उदाहरण के लिए, यदि आपके url www.yoursite.com/products/docupen/rc805 है, तो आप अपने उत्पादों नियंत्रक में बाद के खण्ड को पुनः प्राप्त करने और उन्हें चर के लिए असाइन करने का प्रयोग करेंगे आप $ श्रेणी और $ उत्पाद का उपयोग कर सकते हैं हालांकि आपको इसकी आवश्यकता है।

2

कोडइग्निटर मार्ग regex के साथ अच्छी तरह से काम नहीं करते हैं। वे समर्थित हैं, नहीं, मैं उन्हें काम पर नहीं ले सकता। उन्हें

$route['products/(:any)'] = "products/getCategoryByName/$1"; 
$route['products/(:any)/(:any)'] = "products/$1/getProductByName/$2";