更改邮件中自定义参数的“VerifyEmail”class laravel 5.7 验证邮件中方法 verificationUrl() laravel 5.7

Changing the “VerifyEmail” class for custom parameter in verification link in mail for method verificationUrl() in verification email in laravel 5.7

laravel 5.7 随附的验证电子邮件。我需要如何以及在哪里更改它?我在网上找遍了,但是因为它是5.7的全新特性,所以我找不到答案。你能帮我吗?提前致谢。

基本上 class 在 Illuminate\Auth\Notifications

之下

我想覆盖其中一种方法:

 class VerifyEmail extends Notification
        {
          // i wish i could override this method
           protected function verificationUrl($notifiable)
            {
             return URL::temporarySignedRoute('verification.verify', Carbon::now()->addMinutes(60), ['id' => $notifiable->getKey()]);
            } 
        }

因为您的 User 模型使用 Illuminate\Auth\MustVerifyEmail 您可以覆盖方法 sendEmailVerificationNotification ,该方法通过调用方法 notify 来通知创建的用户并传递,作为参数,Notifications\MustVerifyEmail class.

的新实例

您可以在 User 模型的 sendEmailVerificationNotification 方法中创建一个自定义通知,它将作为参数传递给 $this->notify()

public function sendEmailVerificationNotification()
{
    $this->notify(new App\Notifications\CustomVerifyEmail);
}

并且在您的 CustomVerifyEmail 通知中,您可以定义 route 将通过其处理验证以及它将采用的所有参数。

当新用户注册时,Illuminate\Auth\Events\Registered 事件在 App\Http\Controllers\Auth\RegisterController 中发出,并且该事件有一个监听器 Illuminate\Auth\Listeners\SendEmailVerificationNotification,它在 App\Providers\EventServiceProvider 中注册:

protected $listen = [
    Registered::class => [
        SendEmailVerificationNotification::class,
    ]
];

此侦听器检查在 Laravel 默认身份验证 App\Http\Controllers\Auth\RegisterController 中作为参数传递给 new Registered($user = $this->create($request->all()))$user 是否是 [=30] 的实例=] 这是 Laravel 建议在 App\User 模型中使用的特征,当您想提供默认电子邮件验证并检查 $user 是否尚未验证时。如果全部通过,它将对该用户调用 sendEmailVerificationNotification 方法:

if ($event->user instanceof MustVerifyEmail && !$event->user->hasVerifiedEmail()) {
        $event->user->sendEmailVerificationNotification();
}