在MVC应用程序中包含SMS功能的位置


Where to include SMS-functionality in an MVC application?

我计划重写一个使用Zend FrameworkTwilio(用于发送和接收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>

应用程序中应该负责发送和接收数据的部分是模型。

一旦它们被正确解析,该如何处理它们是控制器应该关心的事情。

我考虑了更长的答案,但这是对你问题的回答。。。如果您有任何子问题,请在评论中提问