Chr*_*nte 5 php model-view-controller zend-framework twilio
我打算重写一个使用Zend Framework和Twilio的应用程序(用于发送和接收SMS消息).回顾过去,我认为我没有将所有短信功能放在正确的位置.这使得网站升级变得困难.
目前,我有一个SMS控制器来处理来自Twilio的请求(用于传入消息).我实现了一个可以处理各种命令的有限状态机(是的,在一个大动作方法中).响应直接从此控制器发送,也可以从我的控制器管理的模型发送.因此,我最终得到了重复的SMS消息模板,并且对于消息的确切位置感到困惑.
我应该怎么做?是否应该在自己的模型中解析和处理传入的SMS消息?目前,我没有SMS模型 - 只是一个短信控制器.或者,你的建议是什么?
如果重要,我打算用CakePHP重写我的应用程序.
我开发了多个使用 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)