场景
用户评论成功后可以灵活配置选用GMAIL、qq或其他邮箱发送邮件。
文件功能
- EmailSenderInterface.php 邮件服务定义接口
- GmailSender.php gmail类实现EmailSenderInterface
- QqSender.php qq类实现EmailSenderInterface
- Comment.php 评论类
- DiController.php 测试演示控制器
代码实现
EmailSenderInterface.php
<?php
/**
* 为邮件服务定义接口
*/
namespace backend\di\yii;
interface EmailSenderInterface
{
public function send();
}
GmailSender.php
<?php
/**
* Gmail邮件服务
*/
namespace backend\di\yii;
use backend\di\yii\EmailSenderInterface;
class GmailSender implements EmailSenderInterface {
public function send()
{
echo '使用gmail发送';
}
}
QqSender.php
<?php
/**
* qq邮件服务
*/
namespace backend\di\yii;
use backend\di\yii\EmailSenderInterface;
class QqSender implements EmailSenderInterface {
public function send()
{
echo '使用qq发送';
}
}
Comment.php
<?php
namespace backend\di\yii;
use backend\di\yii\EmailSenderInterface;
class Comment {
private $_eMailSender;
public function __construct(EmailSenderInterface $emailSender) {
$this->_eMailSender = $emailSender;
}
public function sendEmail() {
$this->_eMailSender->send();
}
}
DiController.php
<?php
namespace backend\controllers;
use Yii;
use yii\di\Container;
class DiController extends \yii\web\Controller{
public function actionIndex(){
$container = new Container;
$container->set('backend\di\yii\EmailSenderInterface',['class'=>'backend\di\yii\GmailSender']);
$comment=$container->get('backend\di\yii\Comment');
$comment->sendEmail();
}
}
运行
若要使用qq邮箱发送,只需更改DiController.php更改注册依赖关系即可:
$container->set('backend\di\yii\EmailSenderInterface',['class'=>'backend\di\yii\QqSender']);
运行如下: