Laravel Auth,获取在 Notification 中传递的默认 URL

Laravel Auth, Getting the default URL that is passed in Notification

我只是想在注册后更改默认身份验证的 toMail() 函数中通知中的 ->greeting() 。我想保留验证 URL 等。但我被卡住了。如果我重写 sendEmailVerificationnotification() ,整个邮件都会被更改。如何获取原本应该发送的 URL 或如何编辑原始身份验证以仅编辑 ->greeting('Hello') with Dear Name, ?

在用户模型中

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

在 CustomVerifyEmail

/**
 * Create a new notification instance.
 *
 * @return void
 */
public function __construct()
{
}

/**
 * Get the notification's delivery channels.
 *
 * @param  mixed  $notifiable
 * @return array
 */
public function via($notifiable)
{
    return ['mail'];
}

/**
 * Get the mail representation of the notification.
 *
 * @param  mixed  $notifiable
 * @return \Illuminate\Notifications\Messages\MailMessage
 */
public function toMail($notifiable)
{
    //dd($notifiable);
    return (new MailMessage)
                ->greeting('Dear ' . $notifiable->name . ',')
                ->line('The introduction to the notification.')
                ->action('Notification Action', url())
                ->line('Thank you for using our application!');
}

/**
 * Get the array representation of the notification.
 *
 * @param  mixed  $notifiable
 * @return array
 */
public function toArray($notifiable)
{
    return [
        //
    ];
}

有一种方法可以自定义 VerifyEmail 发送的 MailMessage,而无需覆盖任何方法或编写您自己的通知 class。

Illuminate\Auth\Notifications\VerifyEmail class 实际上可以让您分配自己的回调来处理通知的 toMail 端。此回调接收 $notifiable$verificationUrl。你可以尝试这样的事情:

use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage; 

VerifyEmail::$toMailCallback = function ($notifiable, $verificationUrl) {
    return (new MailMessage)
        ->greeting("Dear {$notifiable->name},")
        ->line('The introduction to the notification.')
        ->action('Notification Action', $verificationUrl)
        ->line('Thank you for using our application!');        
};

您可以将其放入服务提供商的 boot 方法中。


如果您不想那样做,您可以扩展 VerifyEmail 通知以编写您自己的 toMail 方法,但可以访问获得验证的功能 URL.

use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage; 

class CustomVerifyEmail extends VerifyEmail
{
    public function toMail($notifiable)
    {
        $verificationUrl = $this->verificationUrl($notifiable);

        return (new MailMessage)
            ...
    }
}

然后覆盖用户模型上的 sendEmailVerificationNotification 以发送自定义通知,就像您已经完成的那样。