将变量推送到laravel上的通知视图中

时间:2017-01-25 08:58:01

标签: php laravel laravel-5.3

我正在从laravel 5.2迁移到5.3,并且当用户想要重置密码时我想发送自定义文本。 我现在看到,laravel使用通知,并且默认的“主题”在laravel核心中是硬编码的。 我已经有了这个视图(从5.2开始),通知可以使用自定义视图,所以我尝试了这个:

在User.php(模型)中

/**
     * Send the password reset notification.
     *
     * @param  string  $token
     * @return void
     */
    public function sendPasswordResetNotification($token)
    {
        $this->notify(new SendLinkMailPasswordReset($token, $this->full_name));
    }

我创建了我的通知“SendLinkMailPasswordReset”,用于“覆盖”laravel one和这里的toMail()方法:

/**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->view('auth.emails.password')
                    ->with
                    (
                        [
                            'user'=> $this->full_name,
                            'token'=> $this->token,
                        ]
                    );
    }

如果我执行dd($this->full_name),它可以正常工作,但当我重置密码时,我会Undefined variable: user

我不知道with是否是正确的方法,或者我是否愿意做。 有关信息,请参阅我的sendPasswordResetNotification

public function sendPasswordResetNotification($token)
    { 
        $to=$this->email;
        $user= $this;

        Mail::send('auth.emails.password', ['user'=>$user, 'token'=>$token], function($message) use ($to) {
            $message->to($to)->subject('Reset your password'); 
        } );

    }

有效。我对通知的使用是好还是在我的情况下我应该推送邮件?

2 个答案:

答案 0 :(得分:6)

试试这个

 $user = $this->full_name;
 $token = $this->token;

 return (new MailMessage)
                ->view('auth.emails.password', compact('user','token'));

访问视图中的数据,如

{{ $user }}
{{ $token }}

答案 1 :(得分:-1)

另一方面,我们可以使用$viewData属性(https://laravel.com/api/5.3/Illuminate/Notifications/Messages/MailMessage.html):

$viewData=  [
                'user'=>$this->full_name, 
                'token'=>$this->token
            ];