2010-06-17 13 views
5

हाल ही में, मैं केकपीएचपी से ग्रेल्स तक अपने आवेदन को माइग्रेट करने की कोशिश कर रहा हूं। अब तक यह एक चिकनी नौकायन रहा है, मैं केकपीएचपी के साथ जो भी कर सकता हूं, मैं इसे Grails में बहुत कम कोड के साथ कर सकता हूं। हालांकि, मैं एक सवाल है:Grails में यूआरएल मैपिंग उपसर्ग

:

CakePHP में, वहाँ एक URL उपसर्ग सुविधा है जो आपको, उदाहरण के लिए अगर मैं अपने नियंत्रक में इन कार्यों है एक निश्चित कार्रवाई url करने के लिए उपसर्ग देने के लिए, सक्षम बनाता है PostController
admin_add
admin_edit
admin_delete

मैं बस इसे यू से उपयोग कर सकते हैं आर एल:

mysite/व्यवस्थापक/पोस्ट/जोड़ने
mysite/व्यवस्थापक/पोस्ट/संपादित करें/1
mysite/व्यवस्थापक/पोस्ट/हटाने/2

के बजाय:

mysite/पोस्ट/admin_add
mysite/पोस्ट/admin_edit/1
mysite/पोस्ट/admin_delete/2

+०१२३५१६४१०६

क्या Grails में ऐसा करने के लिए वैसे भी है, या कम से कम ऐसा करने का विकल्प?

उत्तर

1

मैं इसे परीक्षण नहीं किया, लेकिन इस प्रयास करें:

"mysite/$prefix/$controller/$method/$id?"{ 
    action = "${prefix}_${method}" 
} 

यह उपसर्ग और विधि से कार्रवाई का नाम निर्माण करती है।

+0

मैं इस की कोशिश की है, लेकिन समस्या यह है, मैं सभी कार्यों के लिए इस दोहराने की जरूरत है ... – Furunomoe

5

Grails यूआरएल मैपिंग प्रलेखन इस विशेष मामले में आपकी मदद नहीं करता है (अमरा, अगली बार जब यह अपने आप कोशिश करते हैं और एक उत्तर पोस्ट केवल अगर यह किसी भी मदद है)। डैनियल समाधान करीब था, लेकिन काम नहीं है, क्योंकि:

  1. कार्रवाई भाग को बंद करने में होना चाहिए जब डायनामिक रूप से तैयार
  2. "नियंत्रक", "कार्रवाई" और "आईडी" को छोड़कर सभी नाम वाले पैरामीटर सुलभ हैं के माध्यम से परम वस्तु

एक समाधान ऐसा दिखाई दे सकता:

"/admin/$controller/$adminAction?/$param?"{ 
    action = { "admin_${params.adminAction}" } 
} 

कुंजी नहीं है "कार्रवाई" के रूप में पैरामीटर नाम के लिए है, क्योंकि यह सीधे मैप किया जा रहा है एक कार्रवाई के लिए और overriden नहीं किया जा सकता है।

मैं भी सामान्य उपसर्गों के साथ एक गतिशील समाधान की कोशिश की और यह के रूप में अच्छी तरह से काम करने लगता है:

"/$prefix/$controller/$adminAction?/$param?"{ 
    action = { "${params.prefix}_${params.adminAction}" } 
} 
संबंधित मुद्दे