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

Chr*_*nte 5 php model-view-controller zend-framework twilio

我打算重写一个使用Zend FrameworkTwilio的应用程序(用于发送和接收SMS消息).回顾过去,我认为我没有将所有短信功能放在正确的位置.这使得网站升级变得困难.

目前,我有一个SMS控制器来处理来自Twilio的请求(用于传入消息).我实现了一个可以处理各种命令的有限状态机(是的,在一个大动作方法中).响应直接从此控制器发送,也可以从我的控制器管理的模型发送.因此,我最终得到了重复的SMS消息模板,并且对于消息的确切位置感到困惑.

我应该怎么做?是否应该在自己的模型中解析和处理传入的SMS消息?目前,我没有SMS模型 - 只是一个短信控制器.或者,你的建议是什么?

如果重要,我打算用CakePHP重写我的应用程序.

Tim*_*tle 3

我开发了多个使用 Twilio 的 ZF 应用程序。我倾向于在控制器中使用他们的 PHP 帮助程序库,或者(如果它不是简单的应用程序)将他们的帮助程序包装在服务类中:Application_Service_SMS

此时,发送 SMS 消息在控制器中应如下所示:

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

但这只是问题的发送部分,你如何得到$body?由于您在 MVC 框架中运行,我的建议是将两层(模型和视图)分开,就像您在任何其他点所做的那样。

如果模型确定消息的内容,请在控制器中执行以下操作:

$this->view->model = $model;
$body = $this->view->render('sms/' . $command . '.phtml'); 
Run Code Online (Sandbox Code Playgroud)

您必须确保正文少于 160 个字符(或对其进行拆分,然后发送多条消息)。并且您已经使 SMS 消息可编辑,而无需更改模型(因为消息实际上是视图层的一部分)。

由于使用 Twilio,您可以将 SMS 消息作为语音呼叫 TwiML 的一部分发送,因此您还可以重复使用该消息模板,如下所示:

//inside a TwiML script
<Sms>
  <?php echo $this->partial('sms/cmd.phtml', array('model' => $this->model)); ?>
</Sms>
Run Code Online (Sandbox Code Playgroud)