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

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

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

$event->user instanceof MustVerifyEmail

墨楠小
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

你好,
我们的 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年前 评论

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