2011-05-08 11 views
9

में एमवीसी के साथ पोस्ट-रीडायरेक्ट-गेट (पीआरजी) के लिए सर्वोत्तम प्रथाएं क्या एमवीसी के साथ पीआरजी पैटर्न के लिए कोई सर्वोत्तम अभ्यास है?
इस ट्यूटोरियल में:
http://www.theserverside.com/news/1365146/Redirect-After-Post
प्रस्तावित समाधान 4 कार्य आते हैं:
Create_Item (बाद का) => "फिर सेट करता है" फ़ॉर्म और
Display_Item (जीईटी) => प्रपत्र चलता Display_Item पर रीडायरेक्ट , डीबी करने के लिए डेटा को बचाने के लिए यदि त्रुटियां, त्रुटियां बचाने के लिए और Display_Item को अनुप्रेषित, सफलता अगर Display_Stored
Display_Stor को अनुप्रेषित कोशिश (यदि मौजूद अस्थायी डेटा और त्रुटियों के साथ)
Store_Item (बाद का) => एड
(जीईटी) => आइटम बनाया गया या एक सफल संदेश, टीसी दिखाता है।

अब, मुझे लगता है कि POST के साथ पहली कार्रवाई एक समस्या है, क्योंकि हम एक लिंक के साथ फॉर्म शुरू नहीं कर सकते हैं। में GET का उपयोग करना Create_Item एक बेहतर विकल्प प्रतीत होता है।
और यह भी, हम एक ही 3 कार्यों के साथ Create_Item और Display_Item के लिए एक ही कार्रवाई का उपयोग कर प्रपत्र reseting के लिए, उदाहरण के लिए कर सकते हैं (है, लेकिन एक अतिरिक्त झंडा साथ:
http://www.example.com/controller/Create_Item/?reset=1

और यह भी हम कर सकते हैं क्योंकि हम अगर अंदर Create_Item पता चल सके कि अनुरोध GET या POST (ताकि हम Store_Item साथ Display_Item के संयोजन कर रहे हैं) है के लिए एक का उपयोग कर सकते, सिर्फ 2 कार्यों के साथ भी ऐसा ही।

और यह भी हम सिर्फ साथ भी ऐसा ही कर सकते हैं 1 एक्शन, क्योंकि हमारे पास अतिरिक्त ध्वज हो सकता है (यूआरएल क्वेरी में या एक सेसियो में एन) फार्म के बजाय परिणाम दिखाने के लिए:
प्राप्त http://www.example.com/controller/Create_Item/?reset=1 => एक नया रूप से पता चलता है और अगले यूआरएल
प्राप्त http://www.example.com/controller/Create_Item/ पर रीडायरेक्ट => अस्थायी डेटा और त्रुटियों के साथ एक रूप से पता चलता है, तो => बचाने
पोस्ट http://www.example.com/controller/Create_Item/ मौजूद है डीबी में अस्थायी में त्रुटियों, या डेटा (और सफलता के लिए एक सत्र ध्वज सेट) और ऊपर URL या अगले URL पर रीडायरेक्ट
प्राप्त http://www.example.com/controller/Create_Item/ => $ _SESSION [ 'सफलता'] शो परिणाम

व्यक्तिगत तौर पर मैं विचार पसंद करता है, तो 4 कार्य करने के लिए, लेकिन मेरे पास अन्य विकल्पों पर कोई वास्तविक लाभ नहीं है। लेकिन मैं वास्तविक मानदंड के बिना अपने डिजाइन को चुनने में सुरक्षित महसूस नहीं करता हूं।
क्या किसी को PROS और प्रत्येक डिज़ाइन (यदि कोई हो) के CONS पता है?

उदाहरण के लिए, मैं 4 क्रिया क्लीनर देखता हूं, लेकिन अगर हम बदलना चाहते हैं कि अस्थायी डेटा कैसे सहेजा जाता है, तो हमें इसे 4 स्थानों में बदलना होगा।

धन्यवाद!PHP में

उत्तर

4

पैटर्न GET एक खाली फार्म के लिए है, प्रपत्र की सामग्री को संशोधित, तो POST कि सर्वर है, जो तब, एक दूसरे पेज एक GET है एक रीडायरेक्ट भेजता है एक पेज Form submitted successfully. कह करने के लिए शायद करने के लिए। (प्राप्त करें ->) पोस्ट-> रीडायरेक्ट->

पहली क्रिया वास्तव में POST नहीं है। यह फ़ॉर्म भरने और इसे सबमिट करने का अंतिम परिणाम है।गाइड POST के बाद क्या करना है, जैसे कि आप रीडायरेक्ट नहीं करते हैं, तो उपयोगकर्ता को Form submitted successfully कहने वाले पृष्ठ पर छोड़ दिया जाता है जहां वे केवल F5 दबा सकते हैं और POST कर सकते हैं। हालांकि, उस रीडायरेक्ट के साथ, वे उस परिणाम पृष्ठ पर सुरक्षित GET के माध्यम से हैं, जिसके परिणामस्वरूप डबल पोस्ट नहीं होगा।

कार्यान्वयन के लिए, आपको सर्वर की ओर से प्रत्येक की अपनी कार्रवाई होनी चाहिए। यह एमवीसी/रीस्टफुल कार्यान्वयन के साथ इनलाइन है।

  • प्राप्त/यूआरएल कार्रवाई = नई? - एक नया रूप
  • पोस्ट/यूआरएल कार्रवाई प्रस्तुत करना> कॉल new_form() विधि को = बना सकते हैं -> बचाने के लिए और/URL पर रीडायरेक्ट करने के लिए कॉल create_form() विधि? कार्रवाई = दिखाने & id = 1234
  • प्राप्त/यूआरएल कार्रवाई = & id = 1234 दिखाने - परिणाम = प्रदर्शित करने के लिए
  • पोस्ट/यूआरएल कार्रवाई & id = 1234 बचाने के> कॉल show_form() विधि -> कॉल save_form()
को सहेजने और पुनर्निर्देशित करने के लिए विधि

यदि आप दूसरी एक्शन कॉल save चाहते हैं तो आप यहां 3 क्रियाओं का उपयोग कर सकते हैं। अधिकांश आरईएसटी/सीआरयूडी सम्मेलन 4 का उपयोग करते हैं, लेकिन पसंद तुम्हारा है। लाभ आरईएसटी/एमवीसी मार्ग को पहली जगह पर जाने के समान हैं।

रूप में अच्छी तरह इन संसाधनों देखें:

  • RESTful web services
  • This RESTful नियंत्रकों के लिए ठेठ परंपराओं को शामिल किया गया। इसमें रेल शामिल हैं, लेकिन फिर भी आप PHP पर भी लागू होते हैं यदि आप आरईएसटी मार्ग पर जाना चाहते हैं।
+0

हाँ, मैं पीआरजी समझता हूं, लेकिन मैं कार्यान्वयन (PHP में एमवीसी के साथ) के बारे में पूछ रहा हूं। हम 4 क्रियाओं, 3, 2, 1 का उपयोग कर सकते हैं, और अगर मैं दूसरों में से किसी एक का लाभ उठाता हूं तो मैं स्पष्ट रूप से नहीं देख सकता। – Enrique

+0

उम्मीदपूर्वक स्पष्ट करने के लिए अद्यतन किया गया। 4 का उपयोग करना अधिक पारंपरिक और स्पष्ट रूप से बताता है कि आप क्या कर रहे हैं, इसलिए एक मौजूदा फॉर्म को प्रतिपादित करने के बीच कोड कार्यान्वयन में कोई भ्रम नहीं है, एक फॉर्म बनाम बनाम फॉर्म बनाकर बनाम बनाम बनाम। इसे सब कुछ विभाजित करने के लिए सर्वश्रेष्ठ। –

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