无法在Laravel中发送通知(MailMessage中缺少via()方法)

问题描述 投票:1回答:1

这是我的代码:

namespace App;

use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notifiable;

class Customer extends Model
{
    use Notifiable;

    public function sendPasswordResetNotification($token)
    {
        $mail =  (new MailMessage)
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', url(config('app.url').route('password.reset', $token, false)))
            ->line('If you did not request a password reset, no further  action is required.');

        $this->notify($mail);
    }


}

当我尝试运行它时,我收到错误:调用未定义的方法Illuminate \ Notifications \ Messages \ MailMessage :: via()

我不知道我应该在这里添加什么来使它工作。如果有帮助,Customer Class在数据库中有电子邮件列。

php laravel email notifications
1个回答
1
投票

试试这段代码:

使用artisan创建一个sendPasswordResetNotification类

php artisan make:notification sendPasswordResetNotification

sendPasswordResetNotification类:

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class sendPasswordResetNotification extends Notification
{
    use Queueable;

    public $token;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($token)
    {
        $this->token = $token;
    }

    /**
     * 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)
    {
        $mail =  (new MailMessage)
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', url(config('app.url').route('password.reset', $this->token, false)))
            ->line('If you did not request a password reset, no further  action is required.');
    }

}

现在您的客户模型如下所示:

namespace App;

use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notifiable;
use App\Notifications\sendPasswordResetNotification;

class Customer extends Model
{
    use Notifiable;

    public function sendPasswordResetNotification($token)
    {
       $this->notify(new sendPasswordResetNotification($token));
    }

}

第二种使用控制器发送邮件的方法

Customer::find($id)->notify(new sendPasswordResetNotification($token));
© www.soinside.com 2019 - 2024. All rights reserved.