邮件激活里的 Mail::send () 闭包函数的 message 哪里来的?

protected function sendEmailConfirmationTo($user)
    {
        $view = 'emails.confirm';
        $data = compact('user');
        $from = 'aufree@yousails.com';
        $name = 'Aufree';
        $to = $user->email;
        $subject = "感谢注册 Sample 应用!请确认你的邮箱。";

        Mail::send($view, $data, function ($message) use ($from, $name, $to, $subject) {
            $message->from($from, $name)->to($to)->subject($subject);
        });
    }
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5
  • 1.你可以运行php artisan ide-helper:generate会生成一个 _ide_helper.php文件,可以追踪代码
    图1
  • 2.然后再追踪一部,就可以得到源码
    可以看到第三个参数,本质上是一个回调函数
    图2

第三个参数

function ($message) use ($from, $name, $to, $subject) {
            $message->from($from, $name)->to($to)->subject($subject);
        }
  • 3.而第三个参数又被call_user_func($callback, $message);调用。所以控制器中的$message其实就是call_user_func($callback, $message)中的$message

  • 然后在寻找$message变量的赋值位置$data['message'] = $message = $this->createMessage();,
    然后再追踪$this->createMessage()方法,可以看到$message本身就是一个new Message()实例
    所以Illuminate\Mail\Message这个类里面的方法,都是$message变量可以使用的

file

5年前 评论
你看我吊吗啊

回调返回来的,你要想知道为什么 可以逐级向上看源码

5年前 评论

调用这个闭包时,传进去的,,,

5年前 评论
jltxwesley

就是让你看下 Illuminate\Mail\Mailer 里的 send 方法,其中:

$data['message'] = $message = $this->createMessage(); //该方法会创建一个新的 message 对象

call_user_func($callback, $message); //回调

如果不明白 call_user_func,就去看下文档:http://php.net/manual/zh/function.call-use...

5年前 评论
  • 1.你可以运行php artisan ide-helper:generate会生成一个 _ide_helper.php文件,可以追踪代码
    图1
  • 2.然后再追踪一部,就可以得到源码
    可以看到第三个参数,本质上是一个回调函数
    图2

第三个参数

function ($message) use ($from, $name, $to, $subject) {
            $message->from($from, $name)->to($to)->subject($subject);
        }
  • 3.而第三个参数又被call_user_func($callback, $message);调用。所以控制器中的$message其实就是call_user_func($callback, $message)中的$message

  • 然后在寻找$message变量的赋值位置$data['message'] = $message = $this->createMessage();,
    然后再追踪$this->createMessage()方法,可以看到$message本身就是一个new Message()实例
    所以Illuminate\Mail\Message这个类里面的方法,都是$message变量可以使用的

file

5年前 评论

看大家的讨论真的可以学到很多东西

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!