我计划重写一个使用Zend Framework和Twilio(用于发送和接收SMS消息)的应用程序。回过头来看,我不认为我把所有的短信功能都放在了正确的位置。这使得网站升级变得困难。
目前,我有一个SMS控制器,可以处理来自Twilio的请求(针对传入消息)。我实现了一个有限状态机(是的,在一个大动作方法中),它可以处理各种命令。响应直接从这个控制器发送,也从我的控制器管理的模型发送。正因为如此,我最终遇到了重复的短信模板,以及对消息的确切来源的困惑。
我该怎么做?传入的SMS消息是否应该在自己的模型中进行解析和处理?目前,我没有短信模型,只有一个短信控制器。或者,你有什么建议?
如果重要的话,我计划用CakePHP重写我的应用程序。
我已经开发了很多使用Twilio的ZF应用程序。我倾向于在控制器中使用他们的PHP助手库,或者(如果它不是一个简单的应用程序)将他们的助手包装在一个服务类中:Application_Service_SMS
。
此时,在控制器中发送SMS消息应该是这样的:
$sms->send($from, $to, $body); //$sms is a service object of the twilio lib
但这只是问题的发送部分,你如何获得$body
?由于您在MVC框架中运行,我的建议是将两个层(模型和视图)分开,就像在其他任何时候一样。
如果模型决定了消息的内容,请在控制器中执行以下操作:
$this->view->model = $model;
$body = $this->view->render('sms/' . $command . '.phtml');
你必须确保正文少于160个字符(或者拆分,然后发送多条消息)。并且您已经在不更改模型的情况下使SMS消息可编辑(因为消息实际上是视图层的一部分)。
由于有了Twilio,你可以将短信作为语音通话TwiML的一部分发送,你也可以重复使用这样的消息模板:
//inside a TwiML script
<Sms>
<?php echo $this->partial('sms/cmd.phtml', array('model' => $this->model)); ?>
</Sms>
应用程序中应该负责发送和接收数据的部分是模型。
一旦它们被正确解析,该如何处理它们是控制器应该关心的事情。
我考虑了更长的答案,但这是对你问题的回答。。。如果您有任何子问题,请在评论中提问