РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
831 of 1392 menu

Метод with

Метод with применяется к объекту класса Mailable и позволяет передать переменные в представление письма. Метод принимает массив ключ-значение, где ключ - это имя переменной в представлении, а значение - передаваемые данные. Если передан массив с одним ключом, можно использовать сокращённую запись. В представлении письма эти переменные становятся доступны через стандартные конструкции Blade.

Синтаксис

<?php use AppMailOrderShipped; $mail = new OrderShipped($order); $mail->with(['key' => 'value', 'another' => 'data']); ?>

Пример

Давайте создадим класс письма и передадим в него данные о пользователе и заказе с помощью метода with:

<?php namespace AppMail; use IlluminateBusQueueable; use IlluminateMailMailable; use IlluminateMailMailablesContent; use IlluminateQueueSerializesModels; class OrderShipped extends Mailable { use Queueable, SerializesModels; public function __construct( public $order ) {} public function envelope() { return new Envelope( subject: 'Order Shipped', ); } public function content() { return new Content( view: 'emails.orders.shipped', ); } public function attachments() { return []; } } ?>

Теперь отправим письмо и передадим дополнительные данные через метод with в контроллере:

<?php namespace AppHttpControllers; use AppMailOrderShipped; use AppModelsOrder; use IlluminateSupportFacadesMail; class OrderController extends Controller { public function ship(Order $order) { $orderData = [ 'order_number' => $order->id, 'total' => $order->total, ]; Mail::to($order->user->email) ->send(new OrderShipped($order)) ->with([ 'orderData' => $orderData, 'userName' => $order->user->name, ]); return redirect()->back() ->with('success', 'Order shipped successfully'); } } ?>

В представлении письма мы можем использовать переданные переменные $orderData и $userName:

<!DOCTYPE html> <html> <head> <title>Order Shipped</title> </head> <body> <h1>Hello, {{ $userName }}</h1> <p> Your order #{{ $orderData['order_number'] }} has been shipped. </p> <p> Total: ${{ $orderData['total'] }} </p> </body> </html>

Результат выполнения кода в отправителе:

"Mail sent successfully to user@example.com"

Пример

Рассмотрим использование метода with с сокращённым синтаксисом, когда передаётся одно значение:

<?php namespace AppHttpControllers; use AppMailOrderShipped; use AppModelsOrder; use IlluminateSupportFacadesMail; class OrderController extends Controller { public function ship(Order $order) { $discount = $order->total * 0.1; Mail::to($order->user->email) ->send(new OrderShipped($order)) ->with('discount', $discount); return redirect()->back() ->with('success', 'Order shipped successfully'); } } ?>

В представлении теперь доступна переменная $discount:

<!DOCTYPE html> <html> <head> <title>Order Shipped</title> </head> <body> <h1>Hello, {{ $userName ?? 'Customer' }}</h1> <p> Your order #{{ $order->id }} has been shipped. </p> @if (isset($discount)) <p> You received a discount of ${{ $discount }}! </p> @endif </body> </html>

Результат выполнения кода в отправителе:

"Mail sent successfully to user@example.com"

Смотрите также

  • класс Mailable,
    основной класс для создания писем в Laravel
  • метод envelope,
    который определяет метаданные письма
  • метод content,
    который определяет представление письма
  • метод send,
    который отправляет письмо получателю
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить