2009-04-05 14 views
8

मैं Kohana उपयोग कर रहा हूँ, लेकिन इस सवाल का रेल, सीआई, या किसी अन्य MVC वेब विकास रूपरेखा पर लागू होता है। किसी के सर्वर की तरफ AJAX स्क्रिप्ट को छूने के लिए सबसे अच्छी जगह कहां है?कोहाना - आप AJAX स्क्रिप्ट कहां डालते हैं?

मैं योजना पर एक Ajax_Controller बनाने और प्रति व्यक्तिगत स्क्रिप्ट/विधि का उपयोग करने की योजना बना रहा था।

उदाहरण के लिए, मुख पृष्ठ index.php/home पर एक लॉगिन प्रपत्र index.php/ajax/login के लिए एक XMLHttpRequest, और प्रोफ़ाइल संपादित करें प्रपत्र index.php/profile/edit भेज index.php/ajax/editprofile के लिए एक XMLHttpRequest भेजना होगा होगा। सबसे अच्छा अभ्यास क्या है?

उत्तर

1

मैं कोहाना का उपयोग नहीं करता लेकिन मैं अपने ढांचे में जो करता हूं वह यह है कि AJAX स्क्रिप्ट नियंत्रक हैं। मैं उन्हें स्टैंडअलोन नियंत्रकों के रूप में पेश करने का प्रयास करता हूं लेकिन अंत में वे केवल नियंत्रक हैं।

5

आप प्राप्त और पोस्ट अनुरोध के लिए अलग नियंत्रक बनाने के है? मैं नही। मेरी राय में, जेएस अनुरोधों को अलग से अलग नहीं किया जाना चाहिए।

मैं व्यक्तिगत रूप से जेईटी, POST या किसी अन्य प्रकार के अनुरोध की तरह जेएस अनुरोध देखता हूं। इसलिए यदि मेरे पास उपयोगकर्ता से संबंधित जेएस-आधारित क्रियाएं हैं, तो मैं उन्हें उपयोगकर्ता नियंत्रक में बस बना देता हूं।

9

मैं किसी भी दिए गए मॉडल के लिए गैर-AJAX कार्यों के रूप में एक ही नियंत्रक में अपने AJAX क्रियाओं को डालता हूं।

जब मैं, मैं एक ही कार्रवाई का उपयोग करने के लिए और केवल उत्पादन प्रकार बदलने की कोशिश कर सकते हैं। अधिकांश कार्यों में वैसे भी एक गैर-AJAX संस्करण होना चाहिए, इसलिए यह काफी अच्छी तरह से काम करता है। तर्क डुप्लिकेशन को कम करने के लिए बहुत आसान है।

+1

@Mario करने के लिए सहमत करने लगता है। क्या यह सर्वसम्मति के रूप में गिना जाता है? –

+0

वास्तव में, नियंत्रकों को मत बदलें, क्रियाएं समान हैं। बस अपने विचारों को बदलें (AJAX दृश्य जेएसओएन या कुछ और "सामान्य" दृश्य एचटीएमएल) –

+0

पीम की टिप्पणी पर आगे बढ़ें .. http://docs.kohanaphp.com/helpers/request#is_ajax आपको यहां मदद करनी चाहिए। – Louis

1

एक अलग नियंत्रक का उपयोग करना एक अच्छा विचार है। मैं या तो मेरे नियंत्रकों को फ़ंक्शन द्वारा व्यवस्थित करता हूं और फिर कार्य प्रकार से क्रियाएं व्यवस्थित करता हूं।

इसके अतिरिक्त, जब मैं पिलोन का उपयोग कर रहा हूं, तो मैं @jsonify के साथ एक क्रिया को सजाने के लिए तैयार कर सकता हूं और वह स्वचालित रूप से जेसन पर जेथन को परिवर्तित करने का ख्याल रखेगा। बेहद सुविधाजनक।

2

यदि आपका मतलब AJAX (जावास्क्रिप्ट) स्क्रिप्ट स्वयं है, तो इन्हें आपके सार्वजनिक/जेएस फ़ोल्डर में जाना चाहिए। हालांकि, यदि आप इन AJAX अनुरोधों द्वारा किए गए कार्यों का मतलब है, तो उन्हें संबंधित नियंत्रकों के किसी अन्य कार्य के रूप में माना जाना चाहिए। पूरी तरह से भरोसेमंद होने के लिए, आपको उन कार्यों के लिए वापसी मान के रूप में एक अलग प्रारूप (जेसन, एक्सएमएल, आदि) का उपयोग करना चाहिए।

7

AJAX MVC सीमाओं के सभी पार करती है। यही है, यह मॉडल, दृश्य या नियंत्रक में से एक में नहीं जाता है।

  • आपका AJAX लिपियों अपनी साइट पर स्क्रिप्ट कॉल करेंगे - तो यह आपके नियंत्रक परत आप उद्देश्य के लिए बनाया है, जिनमें से एक वर्ग शामिल होगा।
  • उस नियंत्रक बदले में आपके मॉडल परत द्वारा प्रदान किए गए इंटरफ़ेस का उपयोग करके डेटाबेस तक पहुंच जाएगा, जैसे गैर-AJAX अनुरोध होगा।
  • प्रतिक्रिया वापस ग्राहक के लिए के लिए डेटा JSON या XML या कुछ और के रूप में पैक किया जा सकता है।तकनीकी रूप से यह आपके का कार्य परत देखें, भले ही आपके अनुप्रयोग की दृश्य परत की परिभाषा "एचटीएमएल टेम्पलेटिंग सिस्टम" से अधिक कुछ नहीं है, "क्लाइंट को वापस भेजे जाने वाले किसी भी चीज़ को प्रोसेसिंग और स्वरूपण करने के बजाय" यह HTML या कुछ है एक्सएमएल की तरह "तो आपके एक्सएमएल या जेएसओएन पीढ़ी को अपने स्वयं के एक नए छोटे से हिस्से में जाने की आवश्यकता हो सकती है।

स्क्रिप्ट्स (जावास्क्रिप्ट फाइल) स्वयं भेजने के लिए, शायद यह आपके एमवीसी ढांचे के बजाय वेब सर्वर द्वारा सीधे संभाला जा रहा है।

1

मैं आम तौर पर मुख्य अंतर यह मानना ​​है कि ajax नियंत्रक के माध्यम से परिणाम (किया जा रहा है एक साझा मॉडल के माध्यम से उनके अनुरोध भेजने (कि गैर ajax नियंत्रक भी उपयोग करता है)

एक नियंत्रक में अपने सभी ajax अनुरोध रखना चाहते एचटीएमएल टुकड़े, जेसन डेटा, आदि) या गैर-AJAX नियंत्रक (पूर्ण पृष्ठ)

0

आप इसे सामान्य रीस्ट-एपीआई के रूप में लपेट सकते हैं, और विश्वसनीय सम्मेलनों और यूआरआई का उपयोग कर सकते हैं। उदाहरण:

index.php/AJAX/editprofile के बजाय यह index.php/api/profile/profilename के लिए एक पुट अनुरोध हो सकता है।

2

मैं एक noob हूँ, लेकिन मेरी समझ के आधार पर, php MVC के साथ ajax प्राप्त करने के लिए ... सोच चरणों हो सकता है:

  • परिवर्तन परिभाषा/'एचटीएमएल खाके से मौजूदा php दृश्य परत के समारोह परिणाम स्वरूपण (एक्सएमएल, जेएसओएन इत्यादि '-> प्रासंगिक मॉड्यूल से परिणाम, जिसे नियंत्रक द्वारा AJAX ऑब्जेक्ट में आउटपुट करने के लिए बुलाया जाता है, इसका मतलब है कि आपको स्वरूपण विधियों के साथ प्रत्येक विशेष वर्ग में दृश्य परतों को लिखने की आवश्यकता है
  • PHP मॉड्यूल परत एक ही
  • जेएस के साथ एक अजाक्स राउटर क्लास का निर्माण करता है जो उसी संरचना में रहता है जिसे आप यो में रूट करते हैं उर पीएचपी
  • निर्माण एक ajax परिणाम हैंडलर जे एस के साथ कक्षा के परिणाम को संभालने के लिए पीएचपी नियंत्रक (एक्सएमएल JSON आदि ..) से वापस मिला है, तो यहां से जो कुछ भी उपयोगकर्ता बातचीत आप चाहते हैं, इस अजाक्स रूटर वर्ग
  • ऊपर से बुलाया जाएगा

तो,

ajax router (send XMLhttprequest) 
-> PHP controllers C 
-> PHP module -> PHP view results M 
-> PHP controllers output results V 
-> ajax results handle (into page) 
संबंधित मुद्दे