为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 自定义验证通知报错

Laravel 自定义验证通知报错

PHP
料青山看我应如是 2022-12-11 09:06:13
我正在尝试更新 Laravel 中的验证电子邮件通知。我试图在 AppServiceProvider 中生成验证链接,然后将链接传递给通知类,但后来它给了我一个错误,即“未定义属性 ::$view”。应用服务提供商/**     * 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);        });    }验证邮箱<?phpnamespace 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]);    }   
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

本教程对此进行了很好的解释。

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


查看完整回答
反对 回复 2022-12-11
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信