代码之家  ›  专栏  ›  技术社区  ›  Tutu Kaeen

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

  •  1
  • Tutu Kaeen  · 技术社区  · 7 年前

    这是我的密码:

    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);
        }
    
    
    }
    

    当我尝试运行它时,我得到一个错误:调用undefined method Illuminate\Notifications\Messages\MailMessage::via()

    我不知道我应该在这里加些什么来让它起作用。Customer类在数据库中有email列(如果有帮助的话)。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jignesh Joisar    7 年前

    请尝试以下代码:

    使用artisan创建sendPasswordResetNotification类

    php artisan make:notification 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));