1

我只是想在注册后更改默认身份验证的 toMail() 函数中的 ->greeting() 通知。我想保留验证 URL 等。但我被卡住了。如果我覆盖 sendEmailVerificationnotification() ,则整个邮件都会更改。如何获取原本应该发送的 URL 或如何编辑原始身份验证以仅编辑 ->greeting('Hello') 与 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 [
        //
    ];
}
4

1 回答 1

1

有一种方法可以自定义MailMessage发送的内容,VerifyEmail而无需重写任何方法或编写自己的 Notification 类。

该类Illuminate\Auth\Notifications\VerifyEmail实际上将让您分配自己的回调来处理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用户模型上的 以发送自定义通知,就像您已经完成的那样。

于 2019-11-17T05:12:12.413 回答