Метод content
Метод content применяется в классе Mailable для указания представления (view)
и данных, которые будут использоваться при формировании тела письма.
Метод возвращает массив с ключами 'view' (основное представление),
'text' (текстовая версия) и 'with' (данные для передачи в представление).
Первый параметр определяет HTML-шаблон письма, второй - текстовую версию,
третий - ассоциативный массив данных.
Синтаксис
<?php
use Illuminate\Mail\Mailable;
class ExampleMail extends Mailable
{
public function content()
{
return $this->view('emails.example', [
'data' => $this->data,
]);
}
}
?>
Пример
Давайте создадим класс Mailable для отправки приветственного письма пользователю:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class WelcomeMail extends Mailable
{
use Queueable, SerializesModels;
public $userName;
public function __construct($userName)
{
$this->userName = $userName;
}
public function envelope()
{
return new Envelope(
subject: 'Welcome to our site',
);
}
public function content()
{
return new Content(
view: 'emails.welcome',
with: [
'userName' => $this->userName,
],
);
}
}
?>
Пример
Использование текстовой версии письма вместе с HTML-версией:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class OrderConfirmation extends Mailable
{
use Queueable, SerializesModels;
public $orderNumber;
public $amount;
public function __construct($orderNumber, $amount)
{
$this->orderNumber = $orderNumber;
$this->amount = $amount;
}
public function envelope()
{
return new Envelope(
subject: 'Order Confirmation #' . $this->orderNumber,
);
}
public function content()
{
return new Content(
view: 'emails.order-confirm',
text: 'emails.order-confirm-text',
with: [
'orderNumber' => $this->orderNumber,
'amount' => $this->amount,
],
);
}
}
?>
Пример
Отправка письма с использованием метода content:
<?php
namespace App\Http\Controllers;
use App\Mail\WelcomeMail;
use Illuminate\Support\Facades\Mail;
class UserController extends Controller
{
public function register()
{
$userName = 'John Doe';
Mail::to('user@example.com')->send(new WelcomeMail($userName));
echo "Email sent successfully";
}
}
?>
Результат выполнения кода:
"Email sent successfully"
Пример
Использование метода content с передачей коллекции данных:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class ProductsListMail extends Mailable
{
use Queueable, SerializesModels;
public $products;
public function __construct($products)
{
$this->products = $products;
}
public function envelope()
{
return new Envelope(
subject: 'Available Products',
);
}
public function content()
{
return new Content(
view: 'emails.products',
with: [
'products' => $this->products,
'count' => count($this->products),
],
);
}
}
?>
Смотрите также
-
метод
envelope,
который определяет заголовки письма -
метод
attachments,
который добавляет вложения к письму -
метод
with,
который передает данные в представление письма -
метод
attach,
который добавляет вложение из файловой системы