yii2.0依赖注入DI代码实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zsl10/article/details/79354249

场景

用户评论成功后可以灵活配置选用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']);

运行如下:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zsl10/article/details/79354249