PHP Laravel 发送电子邮件

4

我对php和Laravel还很陌生,正在尝试发送邮件,但是我的邮件模板似乎有些问题。

在我的控制器中,我已经从表单接收到了请求,并将信息存储在一个数组中,像这样...

$data = array(
    'name' => $request->name,
    'mail'=> $request->mail,
    'message'=> $request->message,
    'category'=> $request->category,
    'company'=>$request->company
);

如果我对变量$data进行print_r操作,它会打印出类似于以下内容:
Array ( [name] => Boby [mail] => boby@hotmail.com [message] => call me back [category] => 2 [company] => Test )

我使用以下代码部分发送我的电子邮件:
Mail::send('mail', $data, function($message) use ($fromEmail, $fromName)
{   
    $message->from($fromEmail, $fromName);
    $message->to('myemail@gmail.com', 'myname')->subject('subject');
 );

但是当它到达刀片视图时,我收到了这个错误...
    ErrorException (E_ERROR)
Use of undefined constant name - assumed 'name' (this will throw an Error in a future version of PHP) (View: /home/dave/NetBeansProjects/InspectionBelaire/resources/views/mail.blade.php)

这里是完整的帖子和Blade视图。
MailController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Routing\Controller as BaseController;
use Illuminate\Http\Request;
use Mail;

class MailController extends BaseController
{
    public function send(Request $request) {
            $fromEmail = $request->mail;
            $fromName = $request->name;

            $data = array(
                'name' => $request->name,
                'mail'=> $request->mail,
                'message'=> $request->message,
                'category'=> $request->category,
                'company'=>$request->company
            );


            Mail::send('mail', $data, function($message) use ($fromEmail, $fromName)
            {   
                $message->from($fromEmail, $fromName);
                $message->to('otid91@gmail.com', 'dotis')->subject('Nouvelle soumission en ligne');
            });
        }
}

mail.blade.php

<html>
<head>
    <meta charset="utf-8">
</head>
<body>

<div>
  {{name}}
  {{mail}}
  {{message}}
  {{category}}
  {{company}}
</div>

</body>
</html>

2
你的 Blade 文件中变量前面没有 $ 符号。 - aynber
使用 $data['name']。 - train_fox
在您的 Blade 文件中,{{ .. }} 标签之间的任何代码都会被解释为要回显的 PHP 代码。因此,变量名前需要有 $ 字符,就像在 PHP 中一样。所以 {{ $name }} 编译为 <?php echo $name; ?>,这就是为什么 <?php echo name ?> 会抛出错误,因为它不是有效的 PHP 代码(当评估 echo name 片段时,解释器会假定没有 $ 的标识符是常量)。 - Bogdan
1个回答

2

Laravel使用Blade模板引擎,任何放在{{ }}之间的代码基本上都会按照以下方式运行:

<?php

echo [whatever you entered];

?>

所以在你的情况下,你只需要修改你的Blade视图:
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>

        <div>
          {{ $name }}
          {{ $mail }}
          {{ $message }}
          {{$category }}
          {{ $company }}
        </div>

    </body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接