用laravel发送电子邮件,但不识别变量[重复]
Posted
技术标签:
【中文标题】用laravel发送电子邮件,但不识别变量[重复]【英文标题】:Sending email with laravel, but doesn't recognize variable [duplicate] 【发布时间】:2013-10-25 01:51: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');
);
编辑:
template.mail
Name: $name
Email: $email
Message:$message
【问题讨论】:
请向我们展示您的 template.mail。您可能有不止一个问题。 做了另一个编辑,修复了一些。 template.mail 正在编辑中(这就是我在该文件中的全部内容)。但我仍然收到Undefined variable: contactEmail
您也可以在 www.aallouch.com/contact 上进行测试,然后填写表格,您会看到错误消息
将您的模板更改为this is just a test
并尝试发送您的电子邮件。首先,我认为您可能有 stmp 问题。为清楚起见,请从中移除所有刀片。
已更改。但是即使在其上方定义了相同的错误contactEmail,也未定义。它在控制器中
好的,知道了,刚刚编辑了我的消息。您必须使用use ($contactEmail, $contactName)
传递它们。
【参考方案1】:
因为您的 $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)
如上图。
【讨论】:
好的,但是在我收到Name: $name Email: $email Message:$message
的电子邮件中,变量没有被打印出来
您的模板是否命名为 .blade.php?
不,但只是这样做并得到错误:Object of class Illuminate\Mail\Message could not be converted to string
您可能需要将$message
更改为$messageBody
。看起来 function($message)
正在传递给您的视图,而不是您的 $message
。
您展示了“使用use ($contactEmail, $contactName)
将变量传递给闭包”非常有帮助。我从来不知道如何将变量传递给闭包。谢谢!【参考方案2】:
我遇到了这个错误,我已经解决了。我已将 $message
关键字替换为 $data 中的 $comment
。
下面的例子:
$data = array('name' => 'vikas', 'message' => 'test message');
查看
$name
$message
出现错误
$data = array('name' => 'vikas', 'comment' => 'test message');
$name
$comment
现在一切正常。
【讨论】:
【参考方案3】:如果您查看source code,您会看到这一行:
$data['message'] = $message = $this->createMessage();
因此,您的 message
字段被该行覆盖。为字段使用其他名称,例如 text
或 comment
。
【讨论】:
【参考方案4】:我来这里是说,如果您在 Laravel 5.* 或 6.* 中遇到此问题,请确保您在 Mailable 类中将变量设置为 public
。默认情况下,PHPStorm 会将您的属性设为private
,并且它们将无法在电子邮件刀片模板中访问。
【讨论】:
以上是关于用laravel发送电子邮件,但不识别变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章