Я хочу передать строку в электронное письмо в Laravel, но строка не отображается при просмотре электронной почты.
$recoveryString передается на почту:
$recoveryString = str_random(128);
$recoveryString = urlencode($recoveryString);
RecoveryToken::where('user_id', $user->id)->delete();
$recoveryToken = RecoveryToken::create([
'user_id' => $user->id,
'recovery_token' => bcrypt($recoveryString),
]);
Mail::to($user)->send(new ForgotEmail($user, $recoveryString));
ForgotEmail.php:
<?php
namespace App\Mail;
use App\User;
use App\RecoveryToken;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class ForgotEmail extends Mailable
{
use Queueable, SerializesModels;
public $user;
public $recoveryString;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(User $user, $recoveryString)
{
$this->user = $user;
$recoveryString = $recoveryString;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from('[email protected]')
->view('emails.forgot');
}
}
В моем шаблоне блейда для электронной почты {{ $user->username }} получит правильные данные, но {{ $recoveryString }} будет просто пустым. Почему это происходит? У меня сложилось впечатление, что любое общедоступное свойство, определенное в вашем почтовом классе, автоматически становится доступным для представления.






Опечатка - сам делал это сто раз:
В своем конструкторе не забудьте использовать $this:
$recoveryString = $recoveryString; становится $this->recoveryString = $recoveryString;
ХТН
Ваш конструктор должен иметь $this->recoveryString, а не $recoveryString:
Так должно быть:
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(User $user, $recoveryString)
{
$this->user = $user;
$this->recoveryString = $recoveryString;
}