2015-05-20 8 views
10

मेरे पास उपयोगकर्ता के अनुकूल यूआरएल के साथ दो मुद्दे हैं।ज़ेंड फ्रेमवर्क - मार्गों और regex के साथ उपयोगकर्ता के अनुकूल यूआरएल की स्थापना

मैं एक रूटर के रूप में स्थापित इस प्रकार है:

  • वास्तविक URL http://www.example.com/course/view-batch/course_id/19
  • है मैं एक दोस्ताना यूआरएल चाहते http://www.example.com/java-training/19

मैं सेटअप application.ini में निम्नलिखित मार्ग है:

resources.router.routes.viewbatchcourse.route = "/:title/:course_id/" 
resources.router.routes.viewbatchcourse.defaults.controller = course 
resources.router.routes.viewbatchcourse.defaults.action = view-batch 
resources.router.routes.viewbatchcourse.reqs.course_id = "\d+" 

यह काम करता है perf अच्छी तरह से अच्छी तरह से। जो जावा

की उपयोगकर्ता समीक्षाओं
  • वास्तविक URL है http://www.example.com/course/view-reviews/course_id/19
  • मैं एक दोस्ताना यूआरएल http://www.example.com/java-reviews/19

मुझे लगता है इसकी एक वजह से संभव नहीं चाहते हैं -

अब मैं एक नया पृष्ठ है मार्ग पहले से ही उस प्रारूप से मेल खाने के लिए सेटअप है।

तो मैं सोच रहा था कि रेगेक्स का उपयोग करना संभव है या नहीं, अगर शीर्षक में "समीक्षा" है या नहीं, तो इस मार्ग का उपयोग करें।

मैंने इस दृष्टिकोण की कोशिश की, लेकिन यह काम नहीं करता है। इसके बजाय, यह दृश्य बैच पेज खुलता है: अगर मैं यूआरएल http://www.example.com/reviews/19, उसके बाद दृश्य-समीक्षा कार्रवाई बुलाया जाता है में प्रवेश

resources.router.routes.viewreviews.type = "Zend_Controller_Router_Route_Regex" 
resources.router.routes.viewreviews.route = "/:title/:course_id" 
resources.router.routes.viewreviews.defaults.controller = "course" 
resources.router.routes.viewreviews.defaults.action = "view-reviews" 
resources.router.routes.viewreviews.reqs.course_id = "\d+" 
resources.router.routes.viewreviews.reqs.title = "\breviews\b" 

निकटतम मैं काम करने के लिए इस मिल गया है

resources.router.routes.viewreviews.route = "/:title/:course_id" 
resources.router.routes.viewreviews.defaults.controller = "course" 
resources.router.routes.viewreviews.defaults.action = "view-reviews" 
resources.router.routes.viewreviews.reqs.course_id = "\d+" 
resources.router.routes.viewreviews.reqs.title = "reviews" 

है अब। क्या यह संभव है - यह जांचने के लिए कि शीर्षक में "समीक्षा" शब्द है या नहीं - तो यह मार्ग लागू किया जाना चाहिए?


http://www.example.com/java-training/19 के लिए वापस मेरे पहले काम कर मार्ग के लिए जा रहे:

resources.router.routes.viewbatchcourse.route = "/:title/:course_id/" 
resources.router.routes.viewbatchcourse.defaults.controller = course 
resources.router.routes.viewbatchcourse.defaults.action = view-batch 
resources.router.routes.viewbatchcourse.reqs.course_id = "\d+" 

संख्या 19 पाठ्यक्रम आईडी है, जो मैं कार्रवाई में की जरूरत है डेटाबेस से विवरण खींचने के लिए है।

लेकिन जब पृष्ठ प्रदर्शित होता है, तो मुझे नंबर 1 दिखाई नहीं देता है।

मैं सिर्फ यूआरएल http://www.example.com/java-training

इस संभव है बनना चाहते हो?

उत्तर

0

प्रश्न 1 के लिए। मुझे लगता है कि आप इस समस्या को आसानी से मार्ग बदलकर हल कर सकते हैं। आपको इसकी आवश्यकता नहीं है: मार्ग के हिस्से के रूप में शीर्षक, इसके बजाय इसे आपके मामले में हार्ड कोड किया जा सकता है। मैं निम्नलिखित विन्यास की सिफारिश करता हूं।

resources.router.routes.viewbatchcourse.route = "/java-training/:course_id/" 
resources.router.routes.viewbatchcourse.defaults.controller = course 
resources.router.routes.viewbatchcourse.defaults.action = view-batch 
resources.router.routes.viewbatchcourse.defaults.title = java-training 
resources.router.routes.viewbatchcourse.reqs.course_id = "\d+" 

resources.router.routes.viewreviews.route = "/java-reviews/:course_id/" 
resources.router.routes.viewreviews.defaults.controller = course 
resources.router.routes.viewreviews.defaults.action = view-reviews 
resources.router.routes.viewreviews.defaults.title = java-reviews 
resources.router.routes.viewreviews.reqs.course_id = "\d+" 

प्रश्न के लिए 2. जैसा कि आप इसका वर्णन करते हैं, बस नहीं।

+0

अरे जेरेमी - हार्ड कोडिंग एक विकल्प नहीं है क्योंकि "जावा-समीक्षा" एक कोर्स जावा के लिए है - अन्य अन्य पाठ्यक्रमों जैसे "php-reviews" - "पायथन-समीक्षा" आदि के लिए 10 अन्य पृष्ठ होंगे - ताकि मैं एक रेगेक्स की तलाश क्यों कर रहा था जो यूआरएल में शब्द समीक्षाओं को देखता है - धन्यवाद – Gublooo

+0

आपका विकल्प अभी भी कड़ी कोडिंग है - लेकिन आप केवल अंत कोड को सही करते हैं। 'मार्ग = /: शीर्षक-समीक्षा /: course_id' और' मार्ग = /: शीर्षक-प्रशिक्षण /: course_id'। –

0

पुन: प्रश्न 1। मैंने इसका परीक्षण नहीं किया है, लेकिन उम्मीद है कि यह आपको उस दिशा में इंगित कर रहा है जिस पर आप जाना चाहते हैं।

resources.router.routes.viewreviews.type = "Zend_Controller_Router_Route_Regex" 
resources.router.routes.viewreviews.route = "(.+)-reviews/(\d+)" 
resources.router.routes.viewreviews.defaults.controller = "course" 
resources.router.routes.viewreviews.defaults.action = "view-reviews" 
resources.router.routes.viewreviews.map.1 = "title" 
resources.router.routes.viewreviews.map.2 = "course_id" 

पुन: प्रश्न 2। मुझे लगता है कि आपको या तो उपयोगकर्ता को किसी अन्य (पैरामीटर रहित) यूआरएल को अग्रेषित करने या जावास्क्रिप्ट के माध्यम से इसे संभालने की आवश्यकता होगी। Modify the URL without reloading the page देखें।

1

1) आप Route_Regex उपयोग कर सकते हैं कि आप क्या चाहते

protected function _initRoutes() 
{ 
    $router = Zend_Controller_Front::getInstance()->getRouter(); 

    $route = new Zend_Controller_Router_Route_Regex(
     '([a-zA-Z]+)-reviews/(\d+)', 
     array(
      'module' => 'default', 
      'controller' => 'course', 
      'action'  => 'view-reviews' 
     ), 
     array(
      1 => 'language', 
      2 => 'course_id', 
     ) 
    ); 
    $router->addRoute('review', $route); 

    $route = new Zend_Controller_Router_Route_Regex(
     '([a-zA-Z]+)-training/(\d+)', 
     array(
      'module' => 'default', 
      'controller' => 'course', 
      'action'  => 'view-batch' 
     ), 
     array(
      1 => 'language', 
      2 => 'course_id', 
     ) 
    ); 
    $router->addRoute('training', $route);   
} 

2 प्राप्त करने के लिए) दूसरी बात के लिए मैं नहीं देख सकते हैं कि यह कैसे संभव हो सकता है के रूप में। अगर आप की तरह एक यूआरएल प्रदर्शित करने के लिए एक है,

एक बात आप कर सकता है, हालांकि, निश्चित रूप से नाम का उपयोग करने के लिए है:

www.xyz.com/java-training/my-awesome-course-19 
www.xyz.com/java-training/19/my-awesome-course 

यह मार्गों मैं ऊपर mentionned का उपयोग कर बहुत आसान हो जाएगा।

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