2012-09-27 22 views
8

रखने के लिए Grails UrlMapping रीडायरेक्ट मैं Grails 2.1.1 के साथ काम कर रहा हूं और कंट्रोलर क्रियाओं को मैप करने वाले कुछ अनुकूलित यूआरएल जोड़ना चाहता हूं।डीआरवाई

मैं ऐसा कर सकता हूं, लेकिन मूल मानचित्रण अभी भी काम करता है।

उदाहरण के लिए, मैं एक मानचित्रण add-property-to-directory मेरी UrlMappings में इस प्रकार बनाया:

class UrlMappings { 

    static mappings = { 
     "/add-property-to-directory"(controller: "property", action: "create") 
     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     "/"(view:"/index") 
     "500"(view:'/error') 
    } 
} 

अब, मैं /mysite/add-property-to-directory हिट कर सकते हैं और यह PropertyController.create निष्पादित करेगा, जैसा कि मैंने उम्मीद करेंगे।

हालांकि, मैं अभी भी /mysite/property/create पर हिट कर सकता हूं, और यह उसी PropertyController.create विधि को निष्पादित करेगा।

डीआरवाई की भावना में, मैं /mysite/property/create से /mysite/add-property-to-directory से 301 रीडायरेक्ट करना चाहता हूं।

मुझे UrlMappings.groovy में ऐसा करने का कोई तरीका नहीं मिला। क्या किसी को इस तरह से पता है कि मैं इसे Grails में पूरा कर सकता हूं?

बहुत बहुत धन्यवाद!

अद्यतन

यहाँ, समाधान है कि मैं लागू किया है टॉम की उत्तर के आधार पर:

UrlMappings.groovy

class UrlMappings { 

    static mappings = { 

     "/add-property-to-directory"(controller: "property", action: "create") 
     "/property/create" { 
      controller = "redirect" 
      destination = "/add-property-to-directory" 
     } 


     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     "/"(view:"/index") 
     "500"(view:'/error') 
    } 
} 

RedirectController.groovy

class RedirectController { 

    def index() { 
     redirect(url: params.destination, permanent: true) 
    } 
} 
+1

अब तक यह संभव नहीं है। Url मैपिंग में रीडायरेक्ट निर्दिष्ट करना संभव बनाने के लिए एक सुविधा अनुरोध है - http://jira.grails.org/browse/GRAILS-5994 –

+0

@ सुधीर धन्यवाद, जो मेरे प्रश्न का उत्तर देता है। क्या आप अपनी टिप्पणी को उत्तर में कॉपी कर सकते हैं ताकि मैं इसे स्वीकार कर सकूं? –

+0

@ सुधीर, आपकी टिप्पणी और उपयोगी लिंक के लिए धन्यवाद ... टॉम ने अपना जवाब संपादित किया और यह मुझे जो कुछ ढूंढ रहा था उसे करने के लिए सही रास्ते पर ले गया, इसलिए मैंने उसका जवाब स्वीकार कर लिया। –

उत्तर

3

यह इस लक्ष्य को हासिल करना संभव है:

"/$controller/$action?/$id?" (
    controller: 'myRedirectControlller', action: 'myRedirectAction', params:[ controller: $controller, action: $action, id: $id ] 
) 

"/user/list" (controller:'user', action:'list') 

और कार्रवाई में आप मूल्यों को प्राप्त पैरामीटर में normallny:

log.trace 'myRedirectController.myRedirectAction: ' + params.controller + ', ' + params.action + ', ' + params.id 
+0

उत्तर के लिए धन्यवाद, लेकिन मैं मुख्य मैपिंग को रीडायरेक्ट नियंत्रक में नहीं बदल सकता क्योंकि मेरे पास अन्य नियंत्रक हैं जो 'नियंत्रक/क्रिया/आईडी' के Grails सम्मेलन का पालन करते हैं। मैं स्पष्ट रीडायरेक्ट करने में सक्षम होने की उम्मीद कर रहा था। –

+0

यदि आपके पास मानक मैपिंग के साथ नियंत्रक की केवल छोटी मात्रा है, तो आप अतिरिक्त विशिष्ट नियम तैयार कर सकते हैं। मैंने एक टिप्पणी को शामिल करने के लिए अपनी टिप्पणी अपडेट की है। –

+0

धन्यवाद, टॉम। मैंने आपका जवाब स्वीकार कर लिया, यह मुझे सही रास्ते पर ले गया। मैं वास्तव में 'रीडायरेक्ट कंट्रोलर' बनाने के लिए समाप्त हुआ, लेकिन '/ $ नियंत्रक/$ कार्रवाई?/$ आईडी मैपिंग के बजाय?" इसके लिए, मैंने 'संपत्ति/निर्माण' के लिए एक प्रविष्टि बनाई, और प्रत्येक यूआरएल के लिए ऐसा करूँगा कि मैं दोहराना नहीं चाहता। –

0

Grails 2.3 के रूप में, यह करने के लिए संभव है में सीधे पुनर्निर्देश एक रीडायरेक्ट नियंत्रक की आवश्यकता के बिना UrlMappings। तो मामले में आप कभी भी अपग्रेड करने से documentation के अनुसार तो जैसे UrlMappings में अनुप्रेषित कर सकते हैं,:

"/property/create"(redirect: '/add-property-to-directory') 

अनुरोध पैरामीटर मूल अनुरोध का हिस्सा थे रीडायरेक्ट में शामिल किया जाएगा।