2012-02-04 7 views
5

मैं ज़ेंड फ्रेमवर्क और ट्विलियो (एसएमएस संदेशों को भेजने और प्राप्त करने के लिए) का उपयोग करने वाले एप्लिकेशन को फिर से लिखने की योजना बना रहा हूं। वापस देखकर, मुझे नहीं लगता कि मैंने सभी एसएमएस कार्यक्षमताओं को सही जगहों पर रखा है। इसने वेबसाइट को अपग्रेड करना मुश्किल बना दिया है।एमवीसी एप्लिकेशन में एसएमएस-कार्यक्षमता कहां शामिल करें?

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

मुझे यह कैसे करना चाहिए? क्या इनकमिंग एसएमएस संदेशों को अपने मॉडल में पार्स और संसाधित किया जाना चाहिए? वर्तमान में, मेरे पास एक एसएमएस मॉडल नहीं है - बस एक एसएमएस नियंत्रक। या, आप क्या सुझाव देते हैं?

यदि यह महत्वपूर्ण है, तो मैं केकपीएचपी का उपयोग करके अपने आवेदन को फिर से लिखने की योजना बना रहा हूं।

+2

हाँ, यह मॉडल में होना चाहिए:

और Twilio साथ जब से तुम एक आवाज फोन के TwiML के हिस्से के रूप एसएमएस संदेश भेज सकते हैं, तो आप भी इस तरह कि उस संदेश टेम्प्लेट का पुन: उपयोग कर सकते हैं। मॉडल में एप्लिकेशन तर्क शामिल है। मॉडल के लिए उपयोगकर्ता इंटरफ़ेस देखें और नियंत्रक एक (कई संभव) उपयोगकर्ता इंटरफ़ेस बनाएं। आप पतले नियंत्रक और वसा मॉडल चाहते हैं। – Gordon

+0

एमवीसी में संभावित डुप्लिकेट, आप नियंत्रक और मॉडल के बीच रेखा कहां खींचते हैं?] (Http://stackoverflow.com/questions/3499336/in-mvc-where-do-you-draw-the-line- बीच-नियंत्रक-और-मॉडल) – Gordon

उत्तर

3

मैंने ट्विलियो का उपयोग करने वाले कुछ ज़ेड ऐप्स से अधिक विकसित किए हैं। मैं या तो नियंत्रक में अपनी PHP सहायक लाइब्रेरी का उपयोग करता हूं, या (यदि यह एक साधारण अनुप्रयोग के अलावा कुछ भी है) तो अपने सहायक को सेवा वर्ग में लपेटें: Application_Service_SMS

उस बिंदु पर, जो SMS संदेश नियंत्रक में इस तरह दिखना चाहिए भेजने:

$sms->send($from, $to, $body); //$sms is a service object of the twilio lib 

लेकिन उस प्रश्न का ही हिस्सा ही भेज रहे हैं, आप कैसे $body मिलता है? चूंकि आप एक एमवीसी ढांचे में चल रहे हैं, इसलिए मेरा सुझाव दो परतों (मॉडल और दृश्य) को अलग करना होगा, जैसा कि आप किसी अन्य बिंदु पर करेंगे।

मॉडल पृष्ठभूमि में की सामग्री को निर्धारित करते हैं, तो अपने नियंत्रक में कुछ इस तरह करते हैं:

$this->view->model = $model; 
$body = $this->view->render('sms/' . $command . '.phtml'); 

तुम्हें यकीन शरीर कम है कि 160 वर्ण है (या उस पर विभाजन बनाने के लिए होगा, और एकाधिक संदेश भेजें)। और आपने अपना मॉडल बदलने के बिना एसएमएस संदेश संपादन योग्य बना दिया है (क्योंकि संदेश वास्तव में दृश्य परत का हिस्सा है)।

//inside a TwiML script 
<Sms> 
    <?php echo $this->partial('sms/cmd.phtml', array('model' => $this->model)); ?> 
</Sms> 
+0

डी ओह! संदेश उत्पन्न करने के लिए विचारों का उपयोग क्यों नहीं किया? यह एक महान दृष्टिकोण है, धन्यवाद! –

+0

@ सिंपलकोडर कुछ जो आपको ज़ेंड और ट्विलियो के साथ उपयोगी काम मिल सकता है: http://prezi.com/aee_eujg7grb/twilio-the-zend-framework-twiliocon-2011/ –

1

डेटा भेजने, प्राप्त करने के लिए जिम्मेदार होना चाहिए आवेदन का हिस्सा मॉडल है।

सही ढंग से पार्स किए जाने के बाद उनके साथ क्या करना है, कुछ ऐसा है जो नियंत्रक को ध्यान में रखना चाहिए।

मुझे लंबा उत्तर माना जाता है लेकिन यह आपके प्रश्नों का उत्तर है ... यदि आपके पास कोई सबक्वेस्टियन है, तो कृपया टिप्पणी में पूछें।

+0

ठीक है धन्यवाद। तो मुझे मॉडल में पास करने से पहले नियंत्रक में इनपुट मान्य करना चाहिए? –

+0

@ सिंपलकोडर यह निर्भर करता है ... यह किस तरह का सत्यापन है? यदि आप फॉर्म इनपुट को मान्य करते हैं तो आपको नियंत्रक में डेटा जांचना चाहिए। यदि यह एसएमएस के पाठ में कुछ विशेष पात्रों के खिलाफ जांच करता है, तो मॉडल में डेटा को सत्यापित करने के लिए एक विधि होनी चाहिए (और उन्हें भेजने से पहले आंतरिक रूप से जांचें)। शायद अपना खुद का सत्यापनकर्ता लिखें। डेटाबेस में डेटा डालने के रूप में यह बहुत ज्यादा होना चाहिए। हो सकता है: 'मॉडल एसएमएस' (कोई इनपुट सत्यापन नहीं), 'ModelSMS_Reminder ModelSMS' को मान्य करता है वैध उपयोगकर्ता आईडी चेक करता है। – Vyktor

+0

उदाहरण के लिए, कुछ आदेश केवल विशिष्ट संख्याओं से ही बुलाए जा सकते हैं। इसके अलावा, संख्याओं को आक्रमण आदेशों से अवरुद्ध किया जा सकता है। ऐसा कुछ मेरे लिए यह निर्धारित करना मुश्किल है कि यह मॉडल या नियंत्रक होना चाहिए या नहीं। –

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