$event->user instanceof MustVerifyEmail 未理解含义,请教下各位。

        // 如果 user 是继承于 MustVerifyEmail 并且还未激活的话
        if ($event->user instanceof MustVerifyEmail && ! $event->user->hasVerifiedEmail()) {
            // 发送邮件认证消息通知(认证邮件)
            $event->user->sendEmailVerificationNotification();
        }

不理解这个用法, 具体是怎么进行运算的

$event->user instanceof MustVerifyEmail

墨楠小
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

你好,
我们的 User 模型是实现了 MustVerifyEmailContract 契约

class User extends Authenticatable implements MustVerifyEmailContract

首先判断 $event->user 对象是不是MustVerifyEmailContract 的实例,如果是,再去判断这个用户是否已经验证过邮箱

if ($event->user instanceof MustVerifyEmail && ! $event->user->hasVerifiedEmail())

instanceofPHP 操作符,可以用来查看变量具体是哪个类的实例
你可以在判断这里试着打印

...
dd($event->user);  // 查看对象是哪个类的实例
    if ($event->user instanceof MustVerifyEmail && ! $event->user->hasVerifiedEmail()) {
    // 发送邮件认证消息通知(认证邮件)
    $event->user->sendEmailVerificationNotification();
}

然后 $event->user->hasVerifiedEmail() 会调用 vendor\laravel\framework\src\Illuminate\Auth\MustVerifyEmail.php 这个 Trait 就是判断当前这个对象的 email_verified_at 属性是否为空。


这里 契约 是 Laravel 框架的概念,其实原理和就是 PHP INTEFACE接口类 的 抽象类实现,只是 Laravel 框架集中对其进行管理,具体概念可以看这里 Contracts《Laravel 5.5 中文文档》

4年前 评论
讨论数量: 2

就是判断下对象类型是否是MustVerifyEmail

4年前 评论

你好,
我们的 User 模型是实现了 MustVerifyEmailContract 契约

class User extends Authenticatable implements MustVerifyEmailContract

首先判断 $event->user 对象是不是MustVerifyEmailContract 的实例,如果是,再去判断这个用户是否已经验证过邮箱

if ($event->user instanceof MustVerifyEmail && ! $event->user->hasVerifiedEmail())

instanceofPHP 操作符,可以用来查看变量具体是哪个类的实例
你可以在判断这里试着打印

...
dd($event->user);  // 查看对象是哪个类的实例
    if ($event->user instanceof MustVerifyEmail && ! $event->user->hasVerifiedEmail()) {
    // 发送邮件认证消息通知(认证邮件)
    $event->user->sendEmailVerificationNotification();
}

然后 $event->user->hasVerifiedEmail() 会调用 vendor\laravel\framework\src\Illuminate\Auth\MustVerifyEmail.php 这个 Trait 就是判断当前这个对象的 email_verified_at 属性是否为空。


这里 契约 是 Laravel 框架的概念,其实原理和就是 PHP INTEFACE接口类 的 抽象类实现,只是 Laravel 框架集中对其进行管理,具体概念可以看这里 Contracts《Laravel 5.5 中文文档》

4年前 评论

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