Как передать параметры в Laravel Mailable с примерами кода

Чтобы передать параметры в Laravel Mailable, вы можете использовать разные методы в зависимости от ваших конкретных требований. Вот несколько методов, которые вы можете использовать, а также примеры кода:

Метод 1: внедрение в конструктор
В этом методе вы передаете параметры через конструктор вашего класса Mailable. Вот пример:

namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class WelcomeEmail extends Mailable
{
    use Queueable, SerializesModels;
    public $user;
    public function __construct($user)
    {
        $this->user = $user;
    }
    public function build()
    {
        return $this->view('emails.welcome');
    }
}

Затем вы можете передать этот параметр при создании экземпляра Mailable:

use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;
$user = User::find(1);
Mail::to($user->email)->send(new WelcomeEmail($user));

Метод 2: общедоступные свойства
В этом методе вы определяете общедоступные свойства в своем классе Mailable и присваиваете им значения. Вот пример:

namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class WelcomeEmail extends Mailable
{
    use Queueable, SerializesModels;
    public $user;
    public function build()
    {
        return $this->view('emails.welcome');
    }
}

После этого вы сможете присвоить значения свойствам перед отправкой электронного письма:

use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;
$user = User::find(1);
$mail = new WelcomeEmail();
$mail->user = $user;
Mail::to($user->email)->send($mail);

Метод 3: с помощью метода
Вы можете использовать метод withдля передачи данных в представление электронной почты. Вот пример:

namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class WelcomeEmail extends Mailable
{
    use Queueable, SerializesModels;
    public $user;
    public function __construct($user)
    {
        $this->user = $user;
    }
    public function build()
    {
        return $this->view('emails.welcome')
                    ->with(['user' => $this->user]);
    }
}

Затем вы можете передать этот параметр при создании экземпляра Mailable:

use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;
$user = User::find(1);
Mail::to($user->email)->send(new WelcomeEmail($user));

Это три распространенных метода передачи параметров в Laravel Mailables. Выберите метод, который лучше всего соответствует вашим потребностям, исходя из вашего конкретного случая использования.