Я работаю над сайтом, на котором я создаю простую контактную форму в Laravel 5.4
Я использовал следующее в классе SendMailable:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendMailable extends Mailable
{
use Queueable, SerializesModels;
public $fullname,$phone,$email,$description;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($fullname, $phone, $email,$description)
{
$this->fullname = $fullname;
$this->phone = $phone;
$this->email = $email;
$this->description = $description;
}
/**
* Build the message. THIS WILL FORMAT YOUR OUTPUT
*
* @return $this
*/
public function build()
{
return $this->view('email.posting-message')->subject('Contact Us Subject');
}
}
И в контроллере я использую следующее:
<?php
Namespace App\Http\Controllers;
use View;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Http\Controllers\Controller;
use App\Mail\SendMailable;
use Illuminate\Support\Facades\Redirect;
class PostingMessageController extends Controller
{
public function showContactUs()
{
$data = [];
return View::make('emails.posting-message',$data);
}
public function doContactUs(Request $r)
{
$fullname = $r->get('fullName');
$phone = $r->get('phone');
$email = $r->get('email');
$description = $r->get('message');
Mail::to('RECEIVER_EMAIL_ADDRESS')->send(new SendMailable($fullname, $phone, $email, $description));
if (Mail::failures())
{
$message1 = " Something Went Wrong.";
}
else
{
$message2 = " Message Sent Successfully.";
}
return redirect()->route('route_name')->with([
'warning' => $message1,
'success' => $message2
]);
}
}
Blade emails.posting-message имеет следующее содержание:
<div>
<p>Fullname : {{ $this->fullname }}</p>
<p>Phone No. : {{ $this->phone }}</p>
<p>Email Address : {{ $this->email }}</p>
<p>Destination : {{ $this->destination }}</p>
<p>Description : {{ $this->description }}</p>
<hr>
<p>Thank you for your Query. We'll get back to you within 24 Hours. </p>
</div>
В маршрутах я использую следующее:
Route::get('posting-message', 'PostingMessageController@showContactUs')->name('route_name');
Route::post('posting-message', 'PostingMessageController@doContactUs')->name('route_name');
Постановка задачи:
Ошибка, которую я получаю сейчас: Undefined property: Illuminate\View\Engines\CompilerEngine::$fullname (View: /home/vagrant/code/search/resources/views/emails/posting-message.blade.php)
Я не уверен, почему я получаю эту ошибку, так как я сделал ее определение.
В соответствии с документация, свойства в вас SendMailable
класс, который public
будет автоматически доступен в вашем блейд-файле.
Затем вы можете получить доступ к этим свойствам, как если бы вы передавали их в массив данных, т.е. при изменении файла блейда. $this->fullname
чтобы просто $fullname
,
Ваш блейд-файл должен выглядеть примерно так:
<div>
<p>Fullname : {{ $fullname }}</p>
<p>Phone No. : {{ $phone }}</p>
<p>Email Address : {{ $email }}</p>
<p>Destination : {{ $destination }}</p>
<p>Description : {{ $description }}</p>
<hr>
<p>Thank you for your Query. We'll get back to you within 24 Hours. </p>
</div>
Если вы собираетесь использовать get
маршрут, который вы настроили, чтобы увидеть, как он выглядит в браузере, затем вам нужно будет добавить несколько фиктивных данных в массив, который передается в представление.
public function showContactUs()
{
$data = [
'fullname' => 'John Doe',
'phone' => '123456',
'email' => '[email protected]',
'destination' => 'somewhere far, far away',
'description' => 'blah blah blah',
];
return View::make('emails.posting-message',$data);
}
Других решений пока нет …