使用laravel发送电子邮件,但无法识别变量

时间:2013-10-16 19:28:03

标签: php email laravel laravel-4 undefined

我正在尝试通过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');
});

修改

template.mail

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

4 个答案:

答案 0 :(得分:73)

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

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

您的视图中没有可用的$数据,但您可以直接使用:

{{ $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)

如上所示。

答案 1 :(得分:4)

我有这个错误,我已经解决了。我已将$message替换为$comment来自$ data。

以下示例:

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

查看

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

收到错误

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

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

现在它工作正常。

答案 2 :(得分:0)

如果你看source code,你会看到这一行:

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

因此,您的message字段会被该行覆盖。对textcomment等字段使用其他名称。

答案 3 :(得分:0)

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