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

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

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

$event->user instanceof MustVerifyEmail

墨楠小
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

你好,
我们的 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 中文文档》

3年前 评论
讨论数量: 2

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

3年前 评论

你好,
我们的 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 中文文档》

3年前 评论

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