如何解决compact()函数中未定义的变量错误?

时间:2019-08-27 17:26:03

标签: php laravel

enter image description here

我想发送一些信息的电子邮件。这就是为什么我在compact()函数中使用view()函数的原因。但是我收到一个错误“未定义的变量”:

public $message_to_send="";
public $first_name_to_send="";

public function __construct($first_name,$message) {
    $this->message_to_send=$message;
    $this->first_name_to_send=$first_name;
}

public function build(){
    return $this->view('email/contactmessageemail',compact('message_to_send','first_name_to_send'));
}

错误消息是:

  

compact():未定义的变量:message_to_send

2 个答案:

答案 0 :(得分:2)

尝试将其编辑为

view('email.contactmessageemail',[
   'message_to_send' => $this->message_to_send,
   'first_name_to_send' => $this->first_name_to_send
]);

compact在您的情况下不起作用,因为您要传递的变量不在声明为公共属性的方法范围内本地定义

答案 1 :(得分:1)

这是PHP 7.3中使用compact()引入的重大更改。以前,您可以使用compact()发送未定义的变量,但现在将其标记为错误。

compact()仍然是一种出色的方法-但是您将需要在使用它的方法中定义变量。为了保持代码的清洁和可读性,建议您定义变量,然后按照您的原意使用compact()进行传递。

因此您可以使用以下原始代码进行修复:

public function build(){
    $message_to_send = $this->message_to_send;
    $first_name_to_send = $this->first_name_to_send;
    return view('email.contactmessageemail',compact('message_to_send','first_name_to_send'));
}

请注意,我从视图调用中删除了$this

您还可以始终将变量直接传递到build()方法中(这是一种规范),因此您不必在方法中进行定义。