Следуя предыдущему вопросу, у меня есть контроллер электронной почты, настроенный для правильной передачи пользовательских данных в представление. Теперь я пытаюсь изменить его, чтобы вместо этого передать некоторые пользовательские данные. Мой контроллер выглядит так ...
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class Welcome extends Mailable
{
use Queueable, SerializesModels;
public $email_data;
public function __construct($email_data)
{
$this->email_data = $email_data;
}
public function build()
{
return $this->view('emails.welcome')->with(['email_data' => $this->email_data]);
}
}
И я отправляю письмо вот так ...
/* Create Data Array For Email */
$email_data = array(
'first_name'=>'John',
'last_name'=>'Doe',
'email'=>'[email protected]',
'password'=>'temp',
);
/* Send Email */
Mail::to($user->email)->send(new Welcome($email_data));
Это правильно? Когда я пытаюсь использовать этот метод, похоже, что данные не передаются в шаблон электронной почты. Как я могу получить доступ к этим данным в представлении?
Я пробовал без этой части, но, получив доступ в представлении, я получаю неопределенную переменную: электронная почта. Пробовали $ email и $ email_data-> email
попробуйте вот так $email_data['email']
попробуйте с return $this->view('emails.welcome', compact('email_data'))
@Maraboc - отлично, вот и все!






Вам не нужна эта часть ->with(['email_data' => $this->email_data]), потому что, если свойство является общедоступным, вы можете получить к нему доступ в представлении.
И вы передаете массив, поэтому вам нужно получить доступ к таким значениям:
$email_data['email'] // ...
Есть два способа передать данные через представление. Во-первых, любые публичные средства защиты, определенные в почтовом классе, автоматически проходят через представление.
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class Welcome extends Mailable
{
use Queueable, SerializesModels;
public $firstName;
public $lastName;
public $email;
public $password;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($firstName, $lastName, $email, $password)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
$this->email = $email;
$this->password = $password;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders');
}
}
В режиме просмотра Blade
<div>
First Name: {{ $firstName }}
Last Name: {{ $lastName }}
Email: {{ $email }}
Password: {{ $password }}
</div>
Для переменных с защищенными и частными свойствами можно передавать данные через представление с помощью метода with
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class Welcome extends Mailable
{
use Queueable, SerializesModels;
protected $firstName;
protected $lastName;
protected $email;
protected $password;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($firstName, $lastName, $email, $password)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
$this->email = $email;
$this->password = $password;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders')->with([
'first_name'=> $this->firstName,
......
]);
}
}
В режиме просмотра Blade
<div>
First Name: {{ $firstName }}
Last Name: {{ $lastName }}
Email: {{ $email }}
Password: {{ $password }}
</div>
Вы пробовали этот способ?
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class Welcome extends Mailable
{
use Queueable, SerializesModels;
public $data;
public function __construct($data)
{
$this->data = $data;
}
public function build()
{
return $this->view('emails.welcome')->with('data', $this->data);
}
}
а затем в вашем контроллере, откуда вы создаете свой массив данных,
$data = [
'first_name'=>'John',
'last_name'=>'Doe',
'email'=>'[email protected]',
'password'=>'temp'
];
\Mail::to($user->email)->send(new Welcome($data));
Убедитесь, что вы добавили
use Mail;
use App\Mail\Welcome;
в вашем контроллере.
Вы можете получить доступ к данным в вашем представлении следующим образом
{{ $data['first_name'] }}
{{ $data['last_name'] }}
{{ $data['email'] }}
{{ $data['password'] }}
ИЛИ ЖЕ
Вы также можете попробовать Сообщения Markdown для этого
Вам не нужна эта часть
->with(['email_data' => $this->email_data]), если свойство является общедоступным, вы можете получить к нему доступ в представлении