28

我正在尝试通过 Laravel 发送电子邮件,但出现此错误:

未定义变量:contactEmail

即使它在上面定义。这里出了什么问题?

控制器

$contactName = Input::get('name');
$contactEmail = Input::get('email');
$contactMessage = Input::get('message');

$data = array('name'=>$contactName, 'email'=>$contactEmail, 'message'=>$contactMessage);
Mail::send('template.mail', $data, function($message)
{   
    $message->from($contactEmail, $contactName);
    $message->to('info@aallouch.com', 'myName')->subject('Mail via aallouch.com');
});

编辑:

模板.mail

Name: {{$name}}
Email: {{$email}}
Message:{{$message}}
4

4 回答 4

76

由于您的 $data 变量定义为:

$data = array(
    'name'=>$contactName, 
    'email'=>$contactEmail, 
    'message'=>$contactMessage
);

您的视图中不会有 $data 可用,但您可以直接使用:

{{ $name }}
{{ $email }}
{{ $message }}

编辑:

你的控制器应该有:

    $contactName = Input::get('name');
    $contactEmail = Input::get('email');
    $contactMessage = Input::get('message');

    $data = array('name'=>$contactName, 'email'=>$contactEmail, 'message'=>$contactMessage);
    Mail::send('template.mail', $data, function($message) use ($contactEmail, $contactName)
    {   
        $message->from($contactEmail, $contactName);
        $message->to('info@aallouch.com', 'myName')->subject('Mail via aallouch.com');
    });

您必须使用将变量传递给闭包

use ($contactEmail, $contactName)

如上图所示。

于 2013-10-16T19:56:35.290 回答
5

我有这个错误,我已经解决了。我已经用$data替换$message关键字。$comment

下面的例子:

$data = array('name' => 'vikas', 'message' => 'test message');

看法

{{ $name }}
{{ $message }}

出现错误

$data = array('name' => 'vikas', 'comment' => 'test message');

{{ $name }}
{{ $comment }}

现在它工作正常。

于 2014-10-04T17:52:35.320 回答
0

如果你查看源代码,你会看到这一行:

 $data['message'] = $message = $this->createMessage();

因此,您的message字段被该行覆盖。为字段使用其他名称,例如textcomment

于 2018-05-04T16:51:57.630 回答
0

我来这里是说如果你在 Laravel 5.* 或 6.* 中遇到这个问题,请确保你的变量设置public在你的 Mailable 类中。默认情况下,PHPStorm 将创建您的属性private,并且它们将无法在电子邮件刀片模板中访问。

于 2019-12-12T21:26:10.470 回答