Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Laravel[php]中将变量从控制器传递到邮件_Php_Laravel_Laravel 5.4 - Fatal编程技术网

在Laravel[php]中将变量从控制器传递到邮件

在Laravel[php]中将变量从控制器传递到邮件,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,在myUserController中,我有一个函数 public function userFollow($id) { $authuser = Auth::user(); $authuser->follow($id); //mail goes to the followiee ($id) $followiee = User::where('id', $id)->first(); $to = $fo

在my
UserController
中,我有一个函数

public function userFollow($id)
    {
        $authuser = Auth::user();
        $authuser->follow($id);
        //mail goes to the followiee ($id)
        $followiee = User::where('id', $id)->first();
        $to = $followiee->email;
        Mail::to($to)->send(new MyMail);
        return redirect()->back()->with('message', 'Following User');
    }
我还创建了一个可邮寄的
MyMail

class MyMail extends Mailable
{
    use Queueable, SerializesModels;


    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.welcome');
    }
}
在欢迎电子邮件中,我需要访问一些变量,如
$to
,这些变量在
UserController

我在MyMail Mailable中尝试了以下操作:

 public function build()
    {
        return $this->view('emails.welcome',['to' => $to]);
    }
但是我得到了
未定义的变量:to

如何将变量从控制器传递到邮件

更新:

FatalErrorException in Mailable.php line 442:
[] operator not supported for strings
到目前为止,我所尝试的:

UserController

Mail::to($to)->send(new MyMail($to));
Mail::to($to)->send(new MyMail($to));
MyMail

    public $to;
    public function __construct($to)
    {
        $this->to = $to;
    }

    public function build()
    {
        return $this->view('emails.welcome');
    }
public $myTo;

public function __construct($to)
{
    $this->myTo = $to;
}

public function build()
{
    return $this->view('emails.welcome');
}
欢迎使用.blade.php

 {{ $to }}
{{ $myTo }}
错误:

FatalErrorException in Mailable.php line 442:
[] operator not supported for strings

一种解决方案是将变量传递给
MyMail
构造函数,如下所示:

UserController

Mail::to($to)->send(new MyMail($to));
Mail::to($to)->send(new MyMail($to));
MyMail

    public $to;
    public function __construct($to)
    {
        $this->to = $to;
    }

    public function build()
    {
        return $this->view('emails.welcome');
    }
public $myTo;

public function __construct($to)
{
    $this->myTo = $to;
}

public function build()
{
    return $this->view('emails.welcome');
}
欢迎使用.blade.php

 {{ $to }}
{{ $myTo }}
更新: 正如@Rahul在他的回答中指出的,
$to
属性可以定义为public。在这种情况下,
视图将自动填充它

更新2:
您只需要为
$to
变量(例如
$myTo
)指定一个不同的名称,以区别于
Mailable.php
中定义为
public$to=[]的
$to

有两种方法可以使数据在视图中可用

  • 首先,在mailable类上定义的任何公共属性都将自动提供给视图
  • 其次,您可以通过
    with
    方法手动将数据传递到视图,但仍然可以通过mailable类的 建造师;但是,应将此数据设置为受保护或 私有属性,因此数据不会自动提供给 模板

  • 我尝试了这个方法,但是我得到了一个错误
    对App\Mail\MyMail的访问级别::$to必须是public(就像在class illighte\Mail\Mailable中一样)
    为了公开,你不需要将它作为参数传递,请参阅下面解决方案的方法1我也尝试了@Rahul方法,但在Mailable.php第442行中我得到了另一个错误
    FatalErrorException:[]字符串不支持运算符
    Awesome,将其更改为其他变量有效!因此,尝试在Laravel 5.5中的mailable的构造函数中传递自定义字符串变量会给我一个
    BindingResolutionException
    ,说
    “Unsolvable dependency Resolution”
    ,好像它认为字符串是一个依赖项一样。。。在5.5中是否只需要传递依赖项对象,还是我做错了什么?在第一个方法中,您没有在构造函数中传递$to。虽然我通过将变量传递给构造函数尝试了您的第一个方法,但它对我来说不起作用。@thehackwall我已经编写了
    $this->to=$to在第1种方法中,但您也需要像这样传递参数,对吗<代码>公共功能构建($to)
    ohhh是的,我错了