我有一个联系表,就像其他任何联系表一样(它有一个用于输入姓名,电子邮件,主题和消息的字段)。
我创建了一个FormController.php,在其中验证我的身份并利用Mail发送我的表单。
我还使用php artisan make:mail FormMail --markdown=emails.form.data
生成了一个Mailable。
我遇到以下问题:
Undefined variable
。如何提取该特定值,以便在我收到电子邮件时说它来自尝试与我联系的人?
到目前为止,我已经收到Laravel(hello@example.com)中提供的默认电子邮件。我希望电子邮件成为用户输入的电子邮件。例如emily@mail.com
这是我的FormController
<?php
namespace App\Http\Controllers;
use App\Mail\FormMail;
use App\Http\Requests;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
class FormController extends Controller
{
public function getContacto() {
return view('pages.contacto');
}
public function postContacto(Request $request) {
$email = 'random@email.com';
$rules = [
'name' => 'required|regex:/^[\pL\pM\p{Zs}.-]+$/u',
'email1' => 'required|email',
'email2' => 'required|email|same:email1',
'subject' => 'required|max:70',
'bodyMessage' => 'required|max:500'
];
$this->validate($request, $rules);
$name = $request->name;
$email1 = $request->email1;
$subject = $request->subject;
$bodyMessage = $request->bodyMessage;
Mail::to($email)->send(new FormMail($name, $email1, $subject, $bodyMessage));
return view('pages.sent');
}
}
这是我的可邮寄FormMail.php
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class FormMail extends Mailable
{
use Queueable, SerializesModels;
public $name;
public $email1;
public $subject;
public $bodyMessage;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($name, $email1, $subject, $bodyMessage)
{
$this->name = $name;
$this->email1 = $email1;
$this->subject = $subject;
$this->bodyMessage = $bodyMessage;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->with([
'name' => $this->name,
'subject' => $this->subject,
'bodyMessage' => $this->bodyMessage
])
->markdown('emails.form.data');
/*DOES NOT WORK
return $this->from($email1)->subject($subject)->with([
'name' => $this->name,
'email1' => $this->email1])
->markdown('emails.form.data');*/
}
}
您在我的代码中看到的任何帮助和错误将不胜感激。谢谢。
答案 0 :(得分:1)
在您的代码中,您没有正确传递from
和subject
数据,该数据存储在您的类属性中(您使用的是未定义的局部变量)。
您可以在from
方法的第二个参数中传递名称,与subject
方法相同的只是在其中传递主题。另外,您还可以在with
方法中传递要在电子邮件模板视图中使用的变量。因此,您的FormMail.php
将变为:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class FormMail extends Mailable
{
use Queueable, SerializesModels;
public $name;
public $email1;
public $subject;
public $bodyMessage;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($name, $email1, $subject, $bodyMessage)
{
$this->name = $name;
$this->email1 = $email1;
$this->subject = $subject;
$this->bodyMessage = $bodyMessage;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from($this->email1, $this->name)->subject($this->subject)->with([
'name' => $this->name,
'subject' => $this->subject,
'bodyMessage' => $this->bodyMessage
])
->markdown('emails.form.data');
}
}