yii2项目实战-用事件优雅的发送邮件
更新于 2016年12月21日 by 白狼 被浏览了 1352 次

上文我们介绍了事件的概念以及事件的基本操作,包括事件如何定义以及如何触发。

本文我们再通过一个发送邮件的案例对之加深理解

定义邮件类

既然是发送邮件,那自然就需要有一个邮件类,专门用来发送邮件。我们在backend\components下定义一个发送邮件的Mail类

<?php

namespace backend\components;

use Yii;

class Mail
{
    public static function sendMail ()
    {
        echo 'send mail...';
    }
}

定义事件并触发

接着我们在backend\controllers下定义一个发送邮件的控制器SendMailController

<?php

namespace backend\controllers;

use Yii;
use yii\web\Controller;

/**
 * 发送邮件
 * @see http://www.manks.top/document/yii2-event-example.html
 */
class SendMailController extends Controller
{
    const SEND_MAIL = 'send_mail';

    public function init ()
    {
        parent::init();

        // 绑定邮件类,当事件触发的时候,调用我们刚刚定义的邮件类Mail
        $this->on(self::SEND_MAIL, ['backend\components\Mail', 'sendMail']);
    }

    public function actionSend ()
    {
        // 触发邮件事件
        $this->trigger(self::SEND_MAIL);
    }
}

具体的细节我们在上一章节都有所介绍,如果你觉得还是有那么一点稍稍不好理解的话,点击上文再看看呗。

现在我们请求下/index.php?r=send-mail/send操作,页面上输出 send mail...,这便是正常的结果了。我们来看下问题:

回想一下我们平时用qq或者163的邮箱发送邮件的步骤,是不是要填写收件人,主题和内容的呀?如果我们就这样光秃秃的触发了发送邮件的事件,我们是想要把某个固定的邮件内容发送给固定的某个人吗?这肯定不符合我们的实际需求啦!也就是说,我们需要在触发邮件的时候,带一些参数,比如邮箱,主题等信息,然后在Mail类中发送给需要接收邮件的人!

继续阅读

还有66%的精彩内容,购买继续阅读