Laravel: Thông báo (Notifications)
- Giới thiệu
- Tạo thông báo
- Gửi thông báo
- Thông báo qua thư
- Đánh dấu Thư thông báo
- Thông báo cơ sở dữ liệu
- Phát thông báo
- Thông báo SMS
- Thông báo Slack
- Bản địa hóa thông báo
- Sự kiện thông báo
- Kênh tùy chỉnh
Giới thiệu
Ngoài hỗ trợ gửi email , Laravel còn hỗ trợ gửi thông báo trên nhiều kênh gửi, bao gồm email, SMS (qua Vonage , trước đây gọi là Nexmo) và Slack . Ngoài ra, một loạt các kênh thông báo do cộng đồng xây dựng đã được tạo ra để gửi thông báo qua hàng chục kênh khác nhau! Thông báo cũng có thể được lưu trữ trong cơ sở dữ liệu để chúng có thể được hiển thị trong giao diện web của bạn.
Thông thường, thông báo phải là những tin nhắn ngắn gọn, mang tính thông tin để thông báo cho người dùng về điều gì đó đã xảy ra trong ứng dụng của bạn. Ví dụ: nếu bạn đang viết ứng dụng thanh toán, bạn có thể gửi thông báo "Hóa đơn đã thanh toán" cho người dùng của mình qua các kênh email và SMS.
Tạo thông báo
Trong Laravel, mỗi thông báo được đại diện bởi một lớp duy nhất thường được lưu trữ trong app/Notifications
thư mục. Đừng lo lắng nếu bạn không thấy thư mục này trong ứng dụng của mình - nó sẽ được tạo cho bạn khi bạn chạy make:notification
lệnh Artisan:
php artisan make:notification InvoicePaid
Lệnh này sẽ đặt một lớp thông báo mới trong app/Notifications
thư mục của bạn . Mỗi lớp thông báo chứa một via
phương thức và một số phương thức xây dựng thông báo, chẳng hạn như toMail
hoặc toDatabase
, chuyển đổi thông báo thành một thông báo được điều chỉnh cho kênh cụ thể đó.
Gửi thông báo
Sử dụng đặc điểm đáng chú ý
Thông báo có thể được gửi theo hai cách: sử dụng notify
phương pháp của Notifiable
đặc điểm hoặc sử dụng Notification
mặt tiền . Các Notifiable
đặc điểm được đưa vào ứng dụng của bạn App\Models\User
mô hình theo mặc định:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
}
Các notify
phương pháp được cung cấp bởi dự đoán đặc điểm này để nhận một trường hợp thông báo:
use App\Notifications\InvoicePaid;
$user->notify(new InvoicePaid($invoice));
Hãy nhớ rằng, bạn có thể sử dụng
Notifiable
đặc điểm trên bất kỳ mô hình nào của mình. Bạn không bị giới hạn chỉ bao gồm nó trênUser
mô hình của bạn .
Sử dụng Mặt thông báo
Ngoài ra, bạn có thể gửi thông báo qua Notification
mặt tiền . Cách tiếp cận này hữu ích khi bạn cần gửi thông báo đến nhiều thực thể đáng tin cậy, chẳng hạn như một tập hợp người dùng. Để gửi thông báo bằng cách sử dụng mặt tiền, hãy chuyển tất cả các thực thể đáng chú ý và phiên bản thông báo cho send
phương thức:
use Illuminate\Support\Facades\Notification;
Notification::send($users, new InvoicePaid($invoice));
Bạn cũng có thể gửi thông báo ngay lập tức bằng sendNow
phương pháp này. Phương thức này sẽ gửi thông báo ngay lập tức ngay cả khi thông báo triển khai ShouldQueue
giao diện:
Notification::sendNow($developers, new DeploymentCompleted($deployment));
Chỉ định các kênh phân phối
Mỗi lớp thông báo đều có một via
phương thức xác định kênh nào sẽ gửi thông báo. Thông báo có thể được gửi vào mail
, database
, broadcast
, nexmo
, và slack
các kênh truyền hình.
Nếu bạn muốn sử dụng các kênh phân phối khác như Telegram hoặc Pusher, hãy xem trang web Kênh thông báo Laravel do cộng đồng điều hành .
Các via
phương pháp nhận được một $notifiable
ví dụ, đó sẽ là một thể hiện của lớp mà thông báo được gửi. Bạn có thể sử dụng $notifiable
để xác định kênh nào sẽ gửi thông báo:
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return $notifiable->prefers_sms ? ['nexmo'] : ['mail', 'database'];
}
Thông báo xếp hàng
Việc gửi thông báo có thể mất thời gian, đặc biệt nếu kênh cần thực hiện lệnh gọi API bên ngoài để gửi thông báo. Để tăng tốc thời gian phản hồi của ứng dụng, hãy để thông báo của bạn được xếp hàng đợi bằng cách thêm ShouldQueue
giao diện và Queueable
đặc điểm vào lớp của bạn. Giao diện và đặc điểm đã được nhập cho tất cả các thông báo được tạo bằng make:notification
lệnh, vì vậy bạn có thể ngay lập tức thêm chúng vào lớp thông báo của mình:
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
class InvoicePaid extends Notification implements ShouldQueue
{
use Queueable;
// ...
}
Khi ShouldQueue
giao diện đã được thêm vào thông báo của bạn, bạn có thể gửi thông báo như bình thường. Laravel sẽ phát hiện ShouldQueue
giao diện trên lớp và tự động xếp hàng gửi thông báo:
$user->notify(new InvoicePaid($invoice));
Nếu bạn muốn trì hoãn việc gửi thông báo, bạn có thể xâu chuỗi delay
phương pháp vào phần khởi tạo thông báo của mình:
$delay = now()->addMinutes(10);
$user->notify((new InvoicePaid($invoice))->delay($delay));
Bạn có thể chuyển một mảng cho delay
phương thức để chỉ định lượng thời gian trễ cho các kênh cụ thể:
$user->notify((new InvoicePaid($invoice))->delay([
'mail' => now()->addMinutes(5),
'sms' => now()->addMinutes(10),
]));
Khi thông báo xếp hàng, một công việc đã xếp hàng sẽ được tạo cho từng người nhận và kết hợp kênh. Ví dụ: sáu công việc sẽ được gửi đến hàng đợi nếu thông báo của bạn có ba người nhận và hai kênh.
Tùy chỉnh kết nối hàng đợi thông báo
Theo mặc định, các thông báo đã xếp hàng sẽ được xếp vào hàng đợi bằng cách sử dụng kết nối hàng đợi mặc định của ứng dụng của bạn. Nếu bạn muốn chỉ định một kết nối khác sẽ được sử dụng cho một thông báo cụ thể, bạn có thể xác định một thuộc $connection
tính trên lớp thông báo:
/**
* The name of the queue connection to use when queueing the notification.
*
* @var string
*/
public $connection = 'redis';
Tùy chỉnh hàng đợi kênh thông báo
Nếu bạn muốn chỉ định một hàng đợi cụ thể sẽ được sử dụng cho từng kênh thông báo được thông báo hỗ trợ, bạn có thể xác định một viaQueues
phương pháp trên thông báo của mình. Phương thức này sẽ trả về một mảng các cặp tên kênh / tên hàng đợi:
/**
* Determine which queues should be used for each notification channel.
*
* @return array
*/
public function viaQueues()
{
return [
'mail' => 'mail-queue',
'slack' => 'slack-queue',
];
}
Thông báo đã xếp hàng & Giao dịch cơ sở dữ liệu
Khi các thông báo xếp hàng đợi được gửi đi trong các giao dịch cơ sở dữ liệu, chúng có thể được hàng đợi xử lý trước khi giao dịch cơ sở dữ liệu được cam kết. Khi điều này xảy ra, bất kỳ cập nhật nào bạn đã thực hiện cho các mô hình hoặc bản ghi cơ sở dữ liệu trong quá trình giao dịch cơ sở dữ liệu có thể chưa được phản ánh trong cơ sở dữ liệu. Ngoài ra, bất kỳ mô hình hoặc bản ghi cơ sở dữ liệu nào được tạo trong giao dịch có thể không tồn tại trong cơ sở dữ liệu. Nếu thông báo của bạn phụ thuộc vào các kiểu máy này, các lỗi không mong muốn có thể xảy ra khi công việc gửi thông báo đã xếp hàng đợi được xử lý.
Nếu after_commit
tùy chọn cấu hình của kết nối hàng đợi của bạn được đặt thành false
, bạn vẫn có thể chỉ ra rằng một thông báo được xếp hàng đợi cụ thể sẽ được gửi đi sau khi tất cả các giao dịch cơ sở dữ liệu mở đã được cam kết bằng cách xác định một thuộc $afterCommit
tính trên lớp thông báo:
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
class InvoicePaid extends Notification implements ShouldQueue
{
use Queueable;
public $afterCommit = true;
}
Để tìm hiểu thêm về cách giải quyết những vấn đề này, vui lòng xem lại tài liệu liên quan đến các công việc được xếp hàng đợi và giao dịch cơ sở dữ liệu .
Thông báo theo yêu cầu
Đôi khi bạn có thể cần phải gửi thông báo cho một người nào đó không được lưu trữ với tư cách là "người dùng" ứng dụng của bạn. Sử dụng phương pháp Notification
của mặt tiền route
, bạn có thể chỉ định thông tin định tuyến thông báo đặc biệt trước khi gửi thông báo:
Notification::route('mail', 'taylor@example.com')
->route('nexmo', '5555555555')
->route('slack', 'https://hooks.slack.com/services/...')
->notify(new InvoicePaid($invoice));
Nếu bạn muốn cung cấp tên của người nhận khi gửi thông báo theo yêu cầu cho mail
tuyến đường, bạn có thể cung cấp một mảng chứa địa chỉ email làm khóa và tên là giá trị của phần tử đầu tiên trong mảng:
Notification::route('mail', [
'barrett@example.com' => 'Barrett Blair',
])->notify(new InvoicePaid($invoice));
Thông báo qua thư
Định dạng Tin nhắn Thư
Nếu thông báo hỗ trợ được gửi dưới dạng email, bạn nên xác định một toMail
phương thức trên lớp thông báo. Phương thức này sẽ nhận một $notifiable
thực thể và sẽ trả về một Illuminate\Notifications\Messages\MailMessage
thể hiện.
Các MailMessage
lớp có chứa một vài phương pháp đơn giản để giúp bạn xây dựng các thông điệp email giao dịch. Thư có thể chứa các dòng văn bản cũng như một "lời kêu gọi hành động". Hãy xem một toMail
phương pháp ví dụ :
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$url = url('/invoice/'.$this->invoice->id);
return (new MailMessage)
->greeting('Hello!')
->line('One of your invoices has been paid!')
->action('View Invoice', $url)
->line('Thank you for using our application!');
}
Lưu ý rằng chúng tôi đang sử dụng
$this->invoice->id
trongtoMail
phương pháp của chúng tôi . Bạn có thể chuyển bất kỳ dữ liệu nào mà thông báo của bạn cần để tạo thông báo của nó vào phương thức khởi tạo của thông báo.
Trong ví dụ này, chúng tôi đăng ký một lời chào, một dòng văn bản, một lời kêu gọi hành động và sau đó là một dòng văn bản khác. Các phương pháp này do MailMessage
đối tượng cung cấp giúp việc định dạng các email giao dịch nhỏ trở nên đơn giản và nhanh chóng. Sau đó, kênh thư sẽ dịch các thành phần thư thành một mẫu email HTML đáp ứng, đẹp mắt với đối tác văn bản thuần túy. Dưới đây là ví dụ về email do mail
kênh tạo:
Khi gửi thông báo qua thư, hãy đảm bảo đặt
name
tùy chọn cấu hình trongconfig/app.php
tệp cấu hình của bạn . Giá trị này sẽ được sử dụng trong đầu trang và chân trang của thư thông báo qua thư của bạn.
Các tùy chọn định dạng thông báo thư khác
Thay vì xác định "dòng" văn bản trong lớp thông báo, bạn có thể sử dụng view
phương pháp để chỉ định mẫu tùy chỉnh sẽ được sử dụng để hiển thị email thông báo:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)->view(
'emails.name', ['invoice' => $this->invoice]
);
}
Bạn có thể chỉ định dạng xem văn bản thuần túy cho thư bằng cách chuyển tên dạng xem làm phần tử thứ hai của mảng được cấp cho view
phương thức:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)->view(
['emails.name.html', 'emails.name.plain'],
['invoice' => $this->invoice]
);
}
Thông báo lỗi
Một số thông báo thông báo cho người dùng về các lỗi, chẳng hạn như thanh toán hóa đơn không thành công. Bạn có thể chỉ ra rằng một thư liên quan đến lỗi bằng cách gọi error
phương thức khi xây dựng thư của bạn. Khi sử dụng error
phương pháp trên thư, nút gọi hành động sẽ có màu đỏ thay vì màu đen:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Message
*/
public function toMail($notifiable)
{
return (new MailMessage)
->error()
->subject('Notification Subject')
->line('...');
}
Tùy chỉnh người gửi
Theo mặc định, địa chỉ người gửi / từ của email được xác định trong config/mail.php
tệp cấu hình. Tuy nhiên, bạn có thể chỉ định địa chỉ từ cho một thông báo cụ thể bằng from
phương pháp:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->from('barrett@example.com', 'Barrett Blair')
->line('...');
}
Tùy chỉnh Người nhận
Khi gửi thông báo qua mail
kênh, hệ thống thông báo sẽ tự động tìm kiếm thuộc email
tính trên thực thể đáng tin cậy của bạn. Bạn có thể tùy chỉnh địa chỉ email nào được sử dụng để gửi thông báo bằng cách xác định một routeNotificationForMail
phương pháp trên thực thể đáng tin cậy:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
/**
* Route notifications for the mail channel.
*
* @param \Illuminate\Notifications\Notification $notification
* @return array|string
*/
public function routeNotificationForMail($notification)
{
// Return email address only...
return $this->email_address;
// Return email address and name...
return [$this->email_address => $this->name];
}
}
Tùy chỉnh chủ đề
Theo mặc định, chủ đề của email là tên lớp của thông báo được định dạng thành "Title Case". Vì vậy, nếu lớp thông báo của bạn được đặt tên InvoicePaid
, chủ đề của email sẽ là Invoice Paid
. Nếu bạn muốn chỉ định một chủ đề khác cho thông báo, bạn có thể gọi subject
phương thức khi xây dựng thông điệp của mình:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Notification Subject')
->line('...');
}
Tùy chỉnh Người gửi thư
Theo mặc định, thông báo email sẽ được gửi bằng cách sử dụng phong bì mặc định được xác định trong config/mail.php
tệp cấu hình. Tuy nhiên, bạn có thể chỉ định một bưu phẩm khác trong thời gian chạy bằng cách gọi mailer
phương thức khi tạo thư của bạn:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->mailer('postmark')
->line('...');
}
Tùy chỉnh các mẫu
Bạn có thể sửa đổi HTML và mẫu văn bản thuần túy được sử dụng bởi thông báo qua thư bằng cách xuất bản tài nguyên của gói thông báo. Sau khi chạy lệnh này, các mẫu thông báo thư sẽ được đặt trong resources/views/vendor/notifications
thư mục:
php artisan vendor:publish --tag=laravel-notifications
Tệp đính kèm
Để thêm tệp đính kèm vào thông báo qua email, hãy sử dụng attach
phương pháp này trong khi xây dựng thông báo của bạn. Các attach
phương pháp chấp nhận đường dẫn tuyệt đối đến tập tin như là đối số đầu tiên của mình:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->greeting('Hello!')
->attach('/path/to/file');
}
Khi đính kèm tệp vào thư, bạn cũng có thể chỉ định tên hiển thị và / hoặc kiểu MIME bằng cách chuyển array
làm đối số thứ hai cho attach
phương thức:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->greeting('Hello!')
->attach('/path/to/file', [
'as' => 'name.pdf',
'mime' => 'application/pdf',
]);
}
Không giống như đính kèm tệp trong các đối tượng có thể gửi thư, bạn không thể đính kèm tệp trực tiếp từ đĩa lưu trữ bằng cách sử dụng attachFromStorage
. Bạn nên sử dụng attach
phương pháp với một đường dẫn tuyệt đối đến tệp trên đĩa lưu trữ. Ngoài ra, bạn có thể trả về một thư có thể gửi từ toMail
phương thức:
use App\Mail\InvoicePaid as InvoicePaidMailable;
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return Mailable
*/
public function toMail($notifiable)
{
return (new InvoicePaidMailable($this->invoice))
->to($notifiable->email)
->attachFromStorage('/path/to/file');
}
Tệp đính kèm dữ liệu thô
Các attachData
phương pháp có thể được sử dụng để đính kèm một chuỗi nguyên byte như một tập tin đính kèm. Khi gọi attachData
phương thức, bạn nên cung cấp tên tệp sẽ được gán cho phần đính kèm:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->greeting('Hello!')
->attachData($this->pdf, 'name.pdf', [
'mime' => 'application/pdf',
]);
}
Sử dụng Mailables
Nếu cần, bạn có thể trả về một đối tượng có thể gửi thư đầy đủ từ toMail
phương thức thông báo của bạn . Khi trả về một Mailable
thay vì a MailMessage
, bạn sẽ cần chỉ định người nhận thư bằng to
phương thức của đối tượng có thể gửi thư :
use App\Mail\InvoicePaid as InvoicePaidMailable;
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return Mailable
*/
public function toMail($notifiable)
{
return (new InvoicePaidMailable($this->invoice))
->to($notifiable->email);
}
Thư tín & Thông báo theo yêu cầu
Nếu bạn đang gửi một thông báo theo yêu cầu , $notifiable
phiên bản được cung cấp cho toMail
phương thức sẽ là một phiên bản Illuminate\Notifications\AnonymousNotifiable
, cung cấp một routeNotificationFor
phương thức có thể được sử dụng để truy xuất địa chỉ email mà thông báo theo yêu cầu sẽ được gửi đến:
use App\Mail\InvoicePaid as InvoicePaidMailable;
use Illuminate\Notifications\AnonymousNotifiable;
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return Mailable
*/
public function toMail($notifiable)
{
$address = $notifiable instanceof AnonymousNotifiable
? $notifiable->routeNotificationFor('mail')
: $notifiable->email;
return (new InvoicePaidMailable($this->invoice))
->to($address);
}
Xem trước thông báo thư
Khi thiết kế một mẫu thông báo thư, thật tiện lợi để xem trước nhanh chóng thông báo thư được kết xuất trong trình duyệt của bạn giống như một mẫu Blade điển hình. Vì lý do này, Laravel cho phép bạn trả lại bất kỳ thư nào được tạo bởi thông báo thư trực tiếp từ bộ điều khiển hoặc đóng lộ trình. Khi một MailMessage
được trả lại, nó sẽ được hiển thị và hiển thị trong trình duyệt, cho phép bạn nhanh chóng xem trước thiết kế của nó mà không cần gửi nó đến một địa chỉ email thực tế:
use App\Models\Invoice;
use App\Notifications\InvoicePaid;
Route::get('/notification', function () {
$invoice = Invoice::find(1);
return (new InvoicePaid($invoice))
->toMail($invoice->user);
});
Đánh dấu Thư thông báo
Thông báo thư đánh dấu cho phép bạn tận dụng các mẫu thông báo thư được tạo sẵn, đồng thời cho phép bạn tự do viết thư dài hơn, tùy chỉnh. Vì các tin nhắn được viết bằng Markdown, Laravel có thể hiển thị các mẫu HTML đẹp, đáp ứng cho các tin nhắn trong khi cũng tự động tạo một bản đối chiếu văn bản thuần túy.
Tạo thông điệp
Để tạo thông báo với mẫu Markdown tương ứng, bạn có thể sử dụng --markdown
tùy chọn của make:notification
lệnh Artisan:
php artisan make:notification InvoicePaid --markdown=mail.invoice.paid
Giống như tất cả các thông báo thư khác, các thông báo sử dụng mẫu Markdown phải xác định một toMail
phương thức trên lớp thông báo của chúng. Tuy nhiên, thay vì sử dụng các line
và action
phương pháp để tạo thông báo, hãy sử dụng markdown
phương thức để chỉ định tên của mẫu Markdown sẽ được sử dụng. Một mảng dữ liệu bạn muốn cung cấp cho mẫu có thể được chuyển làm đối số thứ hai của phương thức:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$url = url('/invoice/'.$this->invoice->id);
return (new MailMessage)
->subject('Invoice Paid')
->markdown('mail.invoice.paid', ['url' => $url]);
}
Viết tin nhắn
Thông báo thư Markdown sử dụng kết hợp các thành phần Blade và cú pháp Markdown cho phép bạn dễ dàng tạo thông báo trong khi tận dụng các thành phần thông báo được tạo sẵn của Laravel:
@component('mail::message')
# Invoice Paid
Your invoice has been paid!
@component('mail::button', ['url' => $url])
View Invoice
@endcomponent
Thanks,<br>
{{ config('app.name') }}
@endcomponent
Thành phần nút
Thành phần nút hiển thị một liên kết nút được căn giữa. Thành phần chấp nhận hai đối số, a url
và một tùy chọn color
. Màu sắc được hỗ trợ là primary
, green
, và red
. Bạn có thể thêm nhiều thành phần nút vào thông báo như bạn muốn:
@component('mail::button', ['url' => $url, 'color' => 'green'])
View Invoice
@endcomponent
Thành phần bảng điều khiển
Thành phần bảng hiển thị khối văn bản nhất định trong một bảng có màu nền hơi khác so với phần còn lại của thông báo. Điều này cho phép bạn thu hút sự chú ý vào một khối văn bản nhất định:
@component('mail::panel')
This is the panel content.
@endcomponent
Thành phần bảng
Thành phần bảng cho phép bạn chuyển đổi bảng Markdown thành một bảng HTML. Thành phần chấp nhận bảng Markdown làm nội dung của nó. Căn chỉnh cột trong bảng được hỗ trợ bằng cú pháp căn chỉnh bảng Markdown mặc định:
@component('mail::table')
| Laravel | Table | Example |
| ------------- |:-------------:| --------:|
| Col 2 is | Centered | $10 |
| Col 3 is | Right-Aligned | $20 |
@endcomponent
Tùy chỉnh các thành phần
Bạn có thể xuất tất cả các thành phần thông báo Markdown sang ứng dụng của riêng mình để tùy chỉnh. Để xuất các thành phần, hãy sử dụng vendor:publish
lệnh Artisan để xuất bản laravel-mail
thẻ nội dung:
php artisan vendor:publish --tag=laravel-mail
Lệnh này sẽ xuất bản các thành phần thư Markdown vào resources/views/vendor/mail
thư mục. Thư mục mail
sẽ chứa một html
và một text
thư mục, mỗi thư mục chứa các đại diện tương ứng của mọi thành phần có sẵn. Bạn có thể tự do tùy chỉnh các thành phần này theo cách bạn muốn.
Tùy chỉnh CSS
Sau khi xuất các thành phần, resources/views/vendor/mail/html/themes
thư mục sẽ chứa một default.css
tệp. Bạn có thể tùy chỉnh CSS trong tệp này và các kiểu của bạn sẽ tự động được xếp vào hàng trong các phần trình bày HTML của thông báo Markdown của bạn.
Nếu bạn muốn xây dựng một chủ đề hoàn toàn mới cho các thành phần Markdown của Laravel, bạn có thể đặt một tệp CSS trong html/themes
thư mục. Sau khi đặt tên và lưu tệp CSS của bạn, hãy cập nhật theme
tùy chọn của mail
tệp cấu hình để khớp với tên của chủ đề mới của bạn.
Để tùy chỉnh chủ đề cho một thông báo riêng lẻ, bạn có thể gọi theme
phương thức trong khi xây dựng thư e-mail của thông báo. Các theme
phương pháp chấp nhận tên của đề tài mà nên được sử dụng khi gửi thông báo:
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->theme('invoice')
->subject('Invoice Paid')
->markdown('mail.invoice.paid', ['url' => $url]);
}
Thông báo cơ sở dữ liệu
Điều kiện tiên quyết
Các database
kênh thông báo lưu trữ các thông tin thông báo trong một bảng cơ sở dữ liệu. Bảng này sẽ chứa thông tin như loại thông báo cũng như cấu trúc dữ liệu JSON mô tả thông báo.
Bạn có thể truy vấn bảng để hiển thị các thông báo trong giao diện người dùng của ứng dụng. Tuy nhiên, trước khi bạn có thể làm điều đó, bạn sẽ cần tạo một bảng cơ sở dữ liệu để chứa các thông báo của mình. Bạn có thể sử dụng notifications:table
lệnh để tạo sự di chuyển với lược đồ bảng thích hợp:
php artisan notifications:table
php artisan migrate
Định dạng thông báo cơ sở dữ liệu
Nếu thông báo hỗ trợ được lưu trữ trong bảng cơ sở dữ liệu, bạn nên xác định một toDatabase
hoặc toArray
phương thức trên lớp thông báo. Phương thức này sẽ nhận một $notifiable
thực thể và sẽ trả về một mảng PHP thuần túy. Mảng được trả về sẽ được mã hóa dưới dạng JSON và được lưu trữ trong data
cột của notifications
bảng của bạn . Hãy xem một toArray
phương pháp ví dụ :
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
'invoice_id' => $this->invoice->id,
'amount' => $this->invoice->amount,
];
}
toDatabase
Vs. toArray
Các toArray
phương pháp cũng được sử dụng bởi các broadcast
kênh để xác định dữ liệu để phát sóng đến frontend trợ JavaScript của bạn. Nếu bạn muốn có hai biểu diễn mảng khác nhau cho database
và broadcast
các kênh, bạn nên xác định một toDatabase
phương thức thay vì một toArray
phương thức.
Truy cập thông báo
Sau khi thông báo được lưu trữ trong cơ sở dữ liệu, bạn cần một cách thuận tiện để truy cập chúng từ các thực thể đáng tin cậy của mình. Các Illuminate\Notifications\Notifiable
đặc điểm, được bao gồm trên mặc định Laravel của App\Models\User
mô hình, bao gồm một notifications
mối quan hệ hùng biện mà trả về thông báo cho đơn vị. Để tìm nạp thông báo, bạn có thể truy cập phương thức này giống như bất kỳ mối quan hệ Eloquent nào khác. Theo mặc định, các thông báo sẽ được sắp xếp theo created_at
dấu thời gian với các thông báo gần đây nhất ở đầu bộ sưu tập:
$user = App\Models\User::find(1);
foreach ($user->notifications as $notification) {
echo $notification->type;
}
Nếu bạn chỉ muốn truy xuất các thông báo "chưa đọc", bạn có thể sử dụng unreadNotifications
mối quan hệ. Một lần nữa, các thông báo này sẽ được sắp xếp theo created_at
dấu thời gian với các thông báo gần đây nhất ở đầu bộ sưu tập:
$user = App\Models\User::find(1);
foreach ($user->unreadNotifications as $notification) {
echo $notification->type;
}
Để truy cập thông báo từ ứng dụng JavaScript của bạn, bạn nên xác định bộ điều khiển thông báo cho ứng dụng của mình, bộ điều khiển này sẽ trả về thông báo cho một thực thể đáng tin cậy, chẳng hạn như người dùng hiện tại. Sau đó, bạn có thể thực hiện một yêu cầu HTTP tới URL của bộ điều khiển đó từ ứng dụng JavaScript của bạn.
Đánh dấu thông báo là đã đọc
Thông thường, bạn sẽ muốn đánh dấu một thông báo là "đã đọc" khi người dùng xem nó. Các Illuminate\Notifications\Notifiable
đặc điểm cung cấp một markAsRead
phương pháp, trong đó cập nhật các read_at
cột trong lịch sử cơ sở dữ liệu của thông báo:
$user = App\Models\User::find(1);
foreach ($user->unreadNotifications as $notification) {
$notification->markAsRead();
}
Tuy nhiên, thay vì lặp lại từng thông báo, bạn có thể sử dụng markAsRead
phương pháp trực tiếp trên tập hợp các thông báo:
$user->unreadNotifications->markAsRead();
Bạn cũng có thể sử dụng truy vấn cập nhật hàng loạt để đánh dấu tất cả các thông báo là đã đọc mà không cần truy xuất chúng từ cơ sở dữ liệu:
$user = App\Models\User::find(1);
$user->unreadNotifications()->update(['read_at' => now()]);
Bạn có thể delete
nhận thông báo để xóa chúng khỏi bảng hoàn toàn:
$user->notifications()->delete();
Phát thông báo
Điều kiện tiên quyết
Trước khi phát thông báo, bạn nên cấu hình và làm quen với các dịch vụ phát sự kiện của Laravel . Phát sự kiện cung cấp một cách để phản ứng với các sự kiện Laravel phía máy chủ từ giao diện người dùng được hỗ trợ JavaScript của bạn.
Định dạng thông báo phát sóng
Các broadcast
chương trình phát sóng kênh thông báo sử dụng Laravel của sự kiện quảng bá dịch vụ, cho phép frontend trợ JavaScript của bạn để thông báo bắt trong thời gian thực. Nếu một thông báo hỗ trợ phát sóng, bạn có thể xác định một toBroadcast
phương thức trên lớp thông báo. Phương thức này sẽ nhận một $notifiable
thực thể và sẽ trả về một BroadcastMessage
thể hiện. Nếu toBroadcast
phương thức không tồn tại, toArray
phương thức sẽ được sử dụng để thu thập dữ liệu cần được phát sóng. Dữ liệu trả về sẽ được mã hóa dưới dạng JSON và phát tới giao diện người dùng hỗ trợ JavaScript của bạn. Hãy xem một toBroadcast
phương pháp ví dụ :
use Illuminate\Notifications\Messages\BroadcastMessage;
/**
* Get the broadcastable representation of the notification.
*
* @param mixed $notifiable
* @return BroadcastMessage
*/
public function toBroadcast($notifiable)
{
return new BroadcastMessage([
'invoice_id' => $this->invoice->id,
'amount' => $this->invoice->amount,
]);
}
Cấu hình hàng đợi quảng bá
Tất cả các thông báo phát sóng được xếp hàng đợi để phát sóng. Nếu bạn muốn định cấu hình kết nối hàng đợi hoặc tên hàng đợi được sử dụng để xếp hàng hoạt động quảng bá, bạn có thể sử dụng các phương thức onConnection
và onQueue
của BroadcastMessage
:
return (new BroadcastMessage($data))
->onConnection('sqs')
->onQueue('broadcasts');
Tùy chỉnh loại thông báo
Ngoài dữ liệu bạn chỉ định, tất cả các thông báo phát sóng cũng có một type
trường chứa tên lớp đầy đủ của thông báo. Nếu bạn muốn tùy chỉnh thông báo type
, bạn có thể xác định một broadcastType
phương thức trên lớp thông báo:
use Illuminate\Notifications\Messages\BroadcastMessage;
/**
* Get the type of the notification being broadcast.
*
* @return string
*/
public function broadcastType()
{
return 'broadcast.message';
}
Nghe thông báo
Thông báo sẽ phát trên một kênh riêng được định dạng theo {notifiable}.{id}
quy ước. Vì vậy, nếu bạn đang gửi thông báo đến một App\Models\User
phiên bản có ID là 1
, thông báo sẽ được phát trên App.Models.User.1
kênh riêng tư. Khi sử dụng Laravel Echo , bạn có thể dễ dàng nghe thông báo trên một kênh bằng notification
phương pháp:
Echo.private('App.Models.User.' + userId)
.notification((notification) => {
console.log(notification.type);
});
Tùy chỉnh kênh thông báo
Nếu bạn muốn tùy chỉnh kênh mà thông báo phát sóng của một thực thể được phát trên, bạn có thể xác định một receivesBroadcastNotificationsOn
phương pháp trên thực thể đáng tin cậy:
<?php
namespace App\Models;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
/**
* The channels the user receives notification broadcasts on.
*
* @return string
*/
public function receivesBroadcastNotificationsOn()
{
return 'users.'.$this->id;
}
}
Thông báo SMS
Điều kiện tiên quyết
Gửi thông báo SMS trong Laravel được hỗ trợ bởi Vonage (trước đây gọi là Nexmo). Trước khi có thể gửi thông báo qua Vonage, bạn cần cài đặt gói laravel/nexmo-notification-channel
và Trình nexmo/laravel
soạn thảo
composer require laravel/nexmo-notification-channel nexmo/laravel
Các nexmo/laravel
gói bao gồm tập tin cấu hình riêng của mình . Tuy nhiên, bạn không bắt buộc phải xuất tệp cấu hình này sang ứng dụng của riêng mình. Bạn có thể chỉ cần sử dụng các biến NEXMO_KEY
và NEXMO_SECRET
môi trường để đặt khóa công khai và khóa bí mật Vonage của mình.
Tiếp theo, bạn sẽ cần thêm nexmo
mục cấu hình vào config/services.php
tệp cấu hình của mình . Bạn có thể sao chép cấu hình ví dụ bên dưới để bắt đầu:
'nexmo' => [
'sms_from' => '15556666666',
],
Các sms_from
tùy chọn là số điện thoại mà tin nhắn SMS của bạn sẽ được gửi từ. Bạn nên tạo số điện thoại cho ứng dụng của mình trong bảng điều khiển Vonage.
Định dạng thông báo SMS
Nếu thông báo hỗ trợ được gửi dưới dạng SMS, bạn nên xác định một toNexmo
phương thức trên lớp thông báo. Phương thức này sẽ nhận một $notifiable
thực thể và sẽ trả về một Illuminate\Notifications\Messages\NexmoMessage
thể hiện:
/**
* Get the Vonage / SMS representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\NexmoMessage
*/
public function toNexmo($notifiable)
{
return (new NexmoMessage)
->content('Your SMS message content');
}
Nội dung Unicode
Nếu tin nhắn SMS của bạn chứa các ký tự unicode, bạn nên gọi unicode
phương thức khi xây dựng NexmoMessage
phiên bản:
/**
* Get the Vonage / SMS representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\NexmoMessage
*/
public function toNexmo($notifiable)
{
return (new NexmoMessage)
->content('Your unicode message')
->unicode();
}
Định dạng thông báo mã ngắn
Laravel cũng hỗ trợ gửi thông báo mã ngắn, là các mẫu tin nhắn được xác định trước trong tài khoản Vonage của bạn. Để gửi thông báo SMS mã ngắn, bạn nên xác định một toShortcode
phương thức trên lớp thông báo của mình. Từ bên trong phương pháp này, bạn có thể trả về một mảng quy định cụ thể các loại hình thông báo ( alert
, 2fa
hoặc marketing
) cũng như các giá trị tùy chỉnh mà sẽ cư mẫu:
/**
* Get the Vonage / Shortcode representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toShortcode($notifiable)
{
return [
'type' => 'alert',
'custom' => [
'code' => 'ABC123',
],
];
}
Giống như định tuyến Thông báo SMS , bạn nên triển khai
routeNotificationForShortcode
phương pháp này trên mô hình thông báo của mình.
Tùy chỉnh số "Từ"
Nếu bạn muốn gửi một số thông báo từ một số điện thoại khác với số điện thoại được chỉ định trong config/services.php
tệp của bạn , bạn có thể gọi from
phương thức trên một NexmoMessage
ví dụ:
/**
* Get the Vonage / SMS representation of the notification.
*
* @param mixed $notifiable
* @return NexmoMessage
*/
public function toNexmo($notifiable)
{
return (new NexmoMessage)
->content('Your SMS message content')
->from('15554443333');
}
Định tuyến thông báo SMS
Để định tuyến thông báo Vonage đến số điện thoại thích hợp, hãy xác định một routeNotificationForNexmo
phương pháp trên thực thể đáng tin cậy của bạn:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
/**
* Route notifications for the Nexmo channel.
*
* @param \Illuminate\Notifications\Notification $notification
* @return string
*/
public function routeNotificationForNexmo($notification)
{
return $this->phone_number;
}
}
Thông báo Slack
Điều kiện tiên quyết
Trước khi có thể gửi thông báo qua Slack, bạn phải cài đặt kênh thông báo Slack qua Composer:
composer require laravel/slack-notification-channel
Bạn cũng sẽ cần phải định cấu hình tích hợp "Webhook đến" cho nhóm Slack của mình. Sự tích hợp này sẽ cung cấp cho bạn một URL mà bạn có thể sử dụng khi định tuyến thông báo Slack .
Định dạng thông báo Slack
Nếu một thông báo hỗ trợ được gửi dưới dạng tin nhắn Slack, bạn nên xác định một toSlack
phương thức trên lớp thông báo. Phương thức này sẽ nhận một $notifiable
thực thể và sẽ trả về một Illuminate\Notifications\Messages\SlackMessage
thể hiện. Thư slack có thể chứa nội dung văn bản cũng như "tệp đính kèm" định dạng văn bản bổ sung hoặc một mảng trường. Hãy xem một toSlack
ví dụ cơ bản :
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\SlackMessage
*/
public function toSlack($notifiable)
{
return (new SlackMessage)
->content('One of your invoices has been paid!');
}
Tùy chỉnh Người gửi & Người nhận
Bạn có thể sử dụng from
và to
các phương pháp để tùy chỉnh người gửi và người nhận. Các from
phương pháp chấp nhận một định danh tên truy cập và biểu tượng cảm xúc, trong khi to
phương pháp chấp nhận một kênh hoặc tên thành viên:
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\SlackMessage
*/
public function toSlack($notifiable)
{
return (new SlackMessage)
->from('Ghost', ':ghost:')
->to('#bots')
->content('This will be sent to #bots');
}
Bạn cũng có thể sử dụng hình ảnh từ "logo" thay vì biểu tượng cảm xúc:
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\SlackMessage
*/
public function toSlack($notifiable)
{
return (new SlackMessage)
->from('Laravel')
->image('https://laravel.com/img/favicon/favicon.ico')
->content('This will display the Laravel logo next to the message');
}
Tệp đính kèm Slack
Bạn cũng có thể thêm "tệp đính kèm" vào tin nhắn Slack. Tệp đính kèm cung cấp các tùy chọn định dạng phong phú hơn so với tin nhắn văn bản đơn giản. Trong ví dụ này, chúng tôi sẽ gửi thông báo lỗi về một ngoại lệ đã xảy ra trong một ứng dụng, bao gồm một liên kết để xem thêm chi tiết về ngoại lệ:
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\SlackMessage
*/
public function toSlack($notifiable)
{
$url = url('/exceptions/'.$this->exception->id);
return (new SlackMessage)
->error()
->content('Whoops! Something went wrong.')
->attachment(function ($attachment) use ($url) {
$attachment->title('Exception: File Not Found', $url)
->content('File [background.jpg] was not found.');
});
}
Phần đính kèm cũng cho phép bạn chỉ định một mảng dữ liệu sẽ được hiển thị cho người dùng. Dữ liệu đã cho sẽ được trình bày dưới dạng bảng để dễ đọc:
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable)
{
$url = url('/invoices/'.$this->invoice->id);
return (new SlackMessage)
->success()
->content('One of your invoices has been paid!')
->attachment(function ($attachment) use ($url) {
$attachment->title('Invoice 1322', $url)
->fields([
'Title' => 'Server Expenses',
'Amount' => '$1,234',
'Via' => 'American Express',
'Was Overdue' => ':-1:',
]);
});
}
Đánh dấu Nội dung Tệp đính kèm
Nếu một số trường phần đính kèm của bạn chứa Markdown, bạn có thể sử dụng markdown
phương pháp này để hướng dẫn Slack phân tích cú pháp và hiển thị các trường phần đính kèm đã cho dưới dạng văn bản có định dạng Markdown. Các giá trị được chấp nhận bằng phương pháp này là: pretext
, text
, và / hoặc fields
. Để biết thêm thông tin về định dạng tệp đính kèm Slack, hãy xem tài liệu API Slack :
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable)
{
$url = url('/exceptions/'.$this->exception->id);
return (new SlackMessage)
->error()
->content('Whoops! Something went wrong.')
->attachment(function ($attachment) use ($url) {
$attachment->title('Exception: File Not Found', $url)
->content('File [background.jpg] was *not found*.')
->markdown(['text']);
});
}
Định tuyến thông báo Slack
Để định tuyến thông báo Slack đến nhóm và kênh Slack thích hợp, hãy xác định một routeNotificationForSlack
phương pháp trên thực thể đáng tin cậy của bạn. Thao tác này sẽ trả về URL webhook mà thông báo sẽ được gửi đến. URL Webhook có thể được tạo bằng cách thêm dịch vụ "Webhook đến" vào nhóm Slack của bạn:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
/**
* Route notifications for the Slack channel.
*
* @param \Illuminate\Notifications\Notification $notification
* @return string
*/
public function routeNotificationForSlack($notification)
{
return 'https://hooks.slack.com/services/...';
}
}
Bản địa hóa thông báo
Laravel cho phép bạn gửi thông báo bằng ngôn ngữ khác với ngôn ngữ hiện tại của yêu cầu HTTP và thậm chí sẽ nhớ ngôn ngữ này nếu thông báo được xếp hàng đợi.
Để thực hiện điều này, Illuminate\Notifications\Notification
lớp cung cấp một locale
phương thức để đặt ngôn ngữ mong muốn. Ứng dụng sẽ thay đổi thành ngôn ngữ này khi thông báo đang được đánh giá và sau đó hoàn nguyên về ngôn ngữ trước đó khi quá trình đánh giá hoàn tất:
$user->notify((new InvoicePaid($invoice))->locale('es'));
Bản địa hóa của nhiều mục được chú ý cũng có thể đạt được thông qua Notification
mặt tiền:
Notification::locale('es')->send(
$users, new InvoicePaid($invoice)
);
Ngôn ngữ ưa thích của người dùng
Đôi khi, các ứng dụng lưu trữ ngôn ngữ ưa thích của mỗi người dùng. Bằng cách thực hiện HasLocalePreference
hợp đồng trên mô hình đáng tin cậy của bạn, bạn có thể hướng dẫn Laravel sử dụng ngôn ngữ được lưu trữ này khi gửi thông báo:
use Illuminate\Contracts\Translation\HasLocalePreference;
class User extends Model implements HasLocalePreference
{
/**
* Get the user's preferred locale.
*
* @return string
*/
public function preferredLocale()
{
return $this->locale;
}
}
Khi bạn đã triển khai giao diện, Laravel sẽ tự động sử dụng ngôn ngữ ưa thích khi gửi thông báo và mailables tới mô hình. Do đó, không cần gọi locale
phương thức khi sử dụng giao diện này:
$user->notify(new InvoicePaid($invoice));
Sự kiện thông báo
Khi một thông báo được gửi đi, Illuminate\Notifications\Events\NotificationSent
sự kiện sẽ được kích hoạt bởi hệ thống thông báo. Điều này chứa thực thể "notifiable" và bản thân trường hợp thông báo. Bạn có thể đăng ký người nghe cho sự kiện này trong EventServiceProvider
:
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'Illuminate\Notifications\Events\NotificationSent' => [
'App\Listeners\LogNotification',
],
];
Sau khi đăng ký trình nghe trong của bạn
EventServiceProvider
, hãy sử dụngevent:generate
lệnh Artisan để tạo nhanh các lớp trình nghe.
Trong vòng một người biết lắng nghe sự kiện, bạn có thể truy cập notifiable
, notification
, channel
, và response
tài sản trên sự kiện này để tìm hiểu thêm về địa chỉ nhận thông báo hoặc thông báo riêng của mình:
/**
* Handle the event.
*
* @param \Illuminate\Notifications\Events\NotificationSent $event
* @return void
*/
public function handle(NotificationSent $event)
{
// $event->channel
// $event->notifiable
// $event->notification
// $event->response
}
Kênh tùy chỉnh
Laravel cung cấp một số kênh thông báo, nhưng bạn có thể muốn viết trình điều khiển của riêng mình để gửi thông báo qua các kênh khác. Laravel làm cho nó trở nên đơn giản. Để bắt đầu, hãy xác định một lớp có chứa một send
phương thức. Phương thức sẽ nhận được hai đối số: a $notifiable
và a $notification
.
Trong send
phương thức, bạn có thể gọi các phương thức trên thông báo để truy xuất đối tượng tin nhắn mà kênh của bạn hiểu và sau đó gửi thông báo đến phiên bản theo cách $notifiable
bạn muốn:
<?php
namespace App\Channels;
use Illuminate\Notifications\Notification;
class VoiceChannel
{
/**
* Send the given notification.
*
* @param mixed $notifiable
* @param \Illuminate\Notifications\Notification $notification
* @return void
*/
public function send($notifiable, Notification $notification)
{
$message = $notification->toVoice($notifiable);
// Send notification to the $notifiable instance...
}
}
Khi lớp kênh thông báo của bạn đã được xác định, bạn có thể trả lại tên lớp từ via
phương thức của bất kỳ thông báo nào của bạn. Trong ví dụ này, toVoice
phương thức thông báo của bạn có thể trả về bất kỳ đối tượng nào bạn chọn để đại diện cho tin nhắn thoại. Ví dụ: bạn có thể xác định VoiceMessage
lớp của riêng mình để đại diện cho các thông báo sau:
<?php
namespace App\Notifications;
use App\Channels\Messages\VoiceMessage;
use App\Channels\VoiceChannel;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
class InvoicePaid extends Notification
{
use Queueable;
/**
* Get the notification channels.
*
* @param mixed $notifiable
* @return array|string
*/
public function via($notifiable)
{
return [VoiceChannel::class];
}
/**
* Get the voice representation of the notification.
*
* @param mixed $notifiable
* @return VoiceMessage
*/
public function toVoice($notifiable)
{
// ...
}
}