【问题标题】:Showing data in view files while sending mails发送邮件时在视图文件中显示数据
【发布时间】:2020-02-11 00:01:50
【问题描述】:

我正在尝试在注册时向用户发送邮件,在查看文件中我需要发送用户在表单中提交的详细信息。当我尝试发送邮件时,数据没有通过。请帮我解决问题

首先我运行以下命令

php artisan make:mail WelcomeMail

Mails/WelcomeMail.php 下我写了以下代码

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;


class WelcomeMail extends Mailable
{
    use Queueable, SerializesModels;

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

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        //return $this->from('xavierissac94@gmail.com')->subject('new customer registration')->view('emails.welcome');
       return $this->view('emails.welcome');
    }
}

以下是我的注册控制器中的代码

public function storeUsers(Request $request)
{
    $this->validate($request, [
        'email' => 'required|email'
    ]);

    $postdata = $request->all();
    $user = new User;
    $hashedRandomPassword = Hash::make('password', [
        'rounds' => 12
    ]);
   $user = new User;
   $user->name=$postdata['user_name'];
   $user->email=$postdata['email'];
   $user->password= $hashedRandomPassword;
   $user->save();
    $data = array( 'email' => $postdata['email'], 'name' => $postdata['user_name'] );

    Mail::to($user->email)->send(new WelcomeMail($user));
   return back()->with('success','thanks for contacting us');
   exit(ok);
    //Mail::to($postdata['email'])->send(new WelcomeMail($user));
    return $user;
   //return redirect('users');
}

以下是我在视图文件中的代码,这里我尝试使用{{$user['name']}}获取数据

<!DOCTYPE html>
<html>
<head>
    <title>Welcome Email</title>
</head>

<body>
<h2>Dear {{$user['name']}}  </h2>

<p>You have succesfully registerd as a valuable client of LifeLove and Other things. We are sending you a password to login.Please remeber to change your password after login.</p>
<p>Your Password for login is {{$user['password']}} </p>
<p><h2>Kind Regards,</h2></p>
<h2>Team Life Love</h2>
</body>

</html>

但我收到未定义变量$user 错误。我需要在注册时将密码和用户名发送给用户。邮件发送成功,但数据未通过。

请帮帮我

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您的可邮寄类中缺少公共 $user 属性:

    class WelcomeMail extends Mailable
    {
        use Queueable, SerializesModels;
    
        // ADD ME!!!!
        public $user;
    
        // ADD ME TOO!!!!
        public $password;
    
        /**
         * Create a new message instance.
         *
         * @return void
         */
        public function __construct($user, $password)
        {
            $this->user = $user;
            $this->password = $password;
        }
    
        /**
         * Build the message.
         *
         * @return $this
         */
        public function build()
        {
           return $this->view('emails.welcome')->with(['password' => $this->password]);
        }
    }
    

    通常,您需要将一些数据传递给您的视图,以便在呈现电子邮件的 HTML 时使用这些数据。有两种方法可以使数据对您的视图可用。首先,在您的可邮寄类上定义的任何公共属性都将自动对视图可用。因此,例如,您可以将数据传递到可邮寄类的构造函数中,并将该数据设置为类上定义的公共属性

    Mailable docs

    您还需要更新您的可邮寄视图文件以使用对象访问器表示法而不是数组索引。例如:

    // BAD
    <h2>Dear {{$user['name']}}  </h2>
    
    // GOOD
    <h2>Dear {{ $user->name }}  </h2>
    

    【讨论】:

    • 更新了答案以支持发送密码。只需记住将它传递给控制器​​中可邮寄的构造函数,就像您对用户对象所做的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2013-08-26
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多