Laravel 自定义验证通知错误

Laravel custom verification notification error

我正在尝试更新 Laravel 中的验证电子邮件通知。我尝试在 AppServiceProvider 中生成验证 link 然后将 link 传递给通知 class 但后来它给了我一个错误 'undefined property ::$view'.

AppServiceProvider

/**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        VerifyEmail::toMailUsing(function ($notifiable) {
             $verificationUrl = URL::temporarySignedRoute(
                'verification.verify',
                Carbon::now()->addMinutes(config('auth.verification.expire', 60)),
                [
                    'id' => $notifiable->getKey(),
                    'hash' => sha1($notifiable->getEmailForVerification()),
                ]
            );

            return new EmailVerification($verificationUrl);
        });
    }

验证邮箱

<?php

namespace App\Notifications;

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

class EmailVerification extends Notification implements ShouldQueue
{
    use Queueable;

    public $verificationUrl;

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

    /**
     * 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)
    {
        $verificationUrl = $this->verificationUrl;

        return (new MailMessage)
                        ->subject('Please verify your email')
                        ->markdown('emails.verification', ['url' => $verificationUrl]);
    }

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

通知的相关降价视图。

@component('mail::message')
# Email verification - {{ config('app.name') }}

Your registration on our application <b> {{ config('app.name') }} </b> was successfull. Kindly click the button below to verify your email address.

@component('mail::button', ['url' => $url])
Verify Email
@endcomponent

Thanks,<br>
{{ config('app.name') }}
@endcomponent

我收到的错误

** 错误异常 未定义 属性:App\Notifications\EmailVerification::$view **

本教程对此进行了很好的解释。
https://brabeum.com/2019/10/customise-the-laravel-user-verification-email/

您应该首先在您的用户模型中覆盖在用户注册时发送通知的默认函数。

/app/User.php

/**
 * Override the default function that send a notification to verify
 * the email after a new user register.
 *
 */
  public function sendEmailVerificationNotification()
  {
     $this->notify(new Notifications\UserVerificationEmail);
  }

然后创建自定义通知:

/app/Notifications/EmailVerification.php.

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\URL;

class UserVerificationEmail extends Notification
{
    use Queueable;

    /**
     * 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)
    {
        return (new MailMessage)
        ->subject('Please verify your email address')
        ->markdown(
            'emails.userverify', 
            [
               'url' => $this->verificationUrl($notifiable),
               'notifiable' => $notifiable,
            ]
        );
    }

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

    /*
   * Build the verification URL
   *
   * @return URL
   */
   protected function verificationUrl($notifiable)
   {
      return URL::temporarySignedRoute(
         'verification.verify',
         Carbon::now()->addMinutes(
            Config::get('auth.verification.expire', 60)),
              [
                'id' => $notifiable->getKey(),
                'hash' => sha1($notifiable->getEmailForVerification()),
              ]     
         ); 
   }
}

然后是可邮寄模板:

/resources/views/emails/userverify.blade.php

@component('mail::message')
# Welcome {{ $notifiable->name }}

Before you can use this tutorial system you must verify your email address.

@component('mail::button', ['url' => $url])
Brabeum Verify Email Address Tutorial
@endcomponent

If you did not create an account, no further action is required.
Thanks,

{{ config('app.name') }} Team

@component('mail::subcopy')
If you’re having trouble clicking the "Verify Email Address" button, copy and paste the URL below into your web browser: {{ $url }} 
@endcomponent

@endcomponent