نسخه:

اطلاعیه

معرفی

لاراول علاوه بر پشتیبانی از ارسال ایمیل ، از ارسال اعلان‌ها در انواع کانال‌های تحویل، از جمله ایمیل، پیامک (از طریق Vonage ، که قبلاً Nexmo نامیده می‌شد) و Slack نیز پشتیبانی می‌کند . علاوه بر این، انواع کانال های اطلاع رسانی ساخته شده توسط جامعه برای ارسال اعلان ها در ده ها کانال مختلف ایجاد شده است! اعلان ها همچنین ممکن است در یک پایگاه داده ذخیره شوند تا در رابط وب شما نمایش داده شوند.

به طور معمول، اعلان‌ها باید پیام‌های کوتاه و اطلاعاتی باشند که کاربران را از اتفاقی که در برنامه شما رخ داده است مطلع می‌کند. به عنوان مثال، اگر در حال نوشتن یک برنامه صورتحساب هستید، ممکن است از طریق کانال های ایمیل و پیامک، اعلان «فاکتور پرداخت شده» را برای کاربران خود ارسال کنید.

ایجاد اعلان ها

در لاراول، هر اعلان توسط یک کلاس نمایش داده می شود که معمولاً در app/Notifications دایرکتوری ذخیره می شود. اگر این دایرکتوری را در برنامه خود نمی بینید نگران نباشید - با اجرای make:notification دستور Artisan برای شما ایجاد می شود:

php artisan make:notification InvoicePaid

این دستور یک کلاس نوتیفیکیشن تازه را در app/Notifications دایرکتوری شما قرار می دهد. هر کلاس اعلان شامل یک via متد و تعداد متغیری از روش‌های پیام‌سازی است، مانند toMail یا toDatabase ، که اعلان را به پیامی متناسب با آن کانال خاص تبدیل می‌کند.

ارسال اعلان ها

استفاده از ویژگی Notifiable Trait

اعلان ها ممکن است به دو صورت ارسال شوند: با استفاده از notify روش صفت Notifiable یا استفاده از Notification نما . این Notifiable ویژگی به طور پیش فرض در مدل برنامه شما گنجانده شده است App\Models\User :

<?php
 
namespace App\Models;
 
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
 
class User extends Authenticatable
{
use Notifiable;
}

روش notify ارائه شده توسط این ویژگی انتظار دارد که یک نمونه اعلان دریافت کند:

use App\Notifications\InvoicePaid;
 
$user->notify(new InvoicePaid($invoice));

به یاد داشته باشید، می توانید از این Notifiable ویژگی در هر یک از مدل های خود استفاده کنید. شما محدود به گنجاندن آن در مدل خود نیستید User .

با استفاده از نمای اعلان

همچنین، می‌توانید اعلان‌ها را از طریق Notification نما ارسال کنید . این رویکرد زمانی مفید است که شما نیاز به ارسال اعلان به چندین نهاد قابل اطلاع رسانی مانند مجموعه ای از کاربران دارید. برای ارسال اعلان‌ها با استفاده از نما، تمام نهادهای قابل اطلاع و نمونه اعلان را به send روش ارسال کنید:

use Illuminate\Support\Facades\Notification;
 
Notification::send($users, new InvoicePaid($invoice));

همچنین می توانید با استفاده از sendNow روش فوراً اعلان ارسال کنید. این روش بلافاصله اعلان را ارسال می کند حتی اگر اعلان ShouldQueue رابط را پیاده سازی کند:

Notification::sendNow($developers, new DeploymentCompleted($deployment));

تعیین کانال های تحویل

هر کلاس اطلاع رسانی via روشی دارد که تعیین می کند اعلان در کدام کانال ارسال می شود. اعلان‌ها ممکن است در کانال‌ها،،،، mail و ارسال شوند . database broadcast vonage slack

اگر می‌خواهید از کانال‌های تحویل دیگر مانند تلگرام یا Pusher استفاده کنید، وب‌سایت کانال‌های اطلاع رسانی لاراول را بررسی کنید .

متد via یک $notifiable نمونه دریافت می کند که نمونه ای از کلاسی است که اعلان به آن ارسال می شود. $notifiable برای تعیین اینکه اعلان باید در کدام کانال ها ارسال شود، می توانید استفاده کنید :

/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return $notifiable->prefers_sms ? ['vonage'] : ['mail', 'database'];
}

نوتیفیکیشن های صف

قبل از صف‌بندی اعلان‌ها، باید صف خود را پیکربندی کنید و یک Worker راه‌اندازی کنید .

ارسال اعلان‌ها ممکن است زمان بر باشد، به خصوص اگر کانال برای ارسال اعلان نیاز به تماس API خارجی داشته باشد. برای سرعت بخشیدن به زمان پاسخگویی برنامه خود، اجازه دهید اعلان شما با افزودن ShouldQueue رابط و Queueable ویژگی به کلاس خود در صف قرار گیرد. رابط و صفت قبلاً برای همه اعلان‌های تولید شده با استفاده از make:notification دستور وارد شده‌اند، بنابراین می‌توانید فوراً آنها را به کلاس اعلان خود اضافه کنید:

<?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;
 
// ...
}

هنگامی که ShouldQueue رابط به اعلان شما اضافه شد، می توانید اعلان را مانند معمول ارسال کنید. لاراول ShouldQueue اینترفیس کلاس را شناسایی می کند و به طور خودکار تحویل اعلان را در صف قرار می دهد:

$user->notify(new InvoicePaid($invoice));

هنگام صف‌بندی اعلان‌ها، یک کار در صف برای هر گیرنده و ترکیب کانال ایجاد می‌شود. به عنوان مثال، اگر اعلان شما دارای سه گیرنده و دو کانال باشد، شش شغل به صف ارسال می شود.

تاخیر در اعلان ها

اگر می‌خواهید تحویل اعلان را به تأخیر بیندازید، می‌توانید روش را delay به نمونه اعلان خود زنجیره بزنید:

$delay = now()->addMinutes(10);
 
$user->notify((new InvoicePaid($invoice))->delay($delay));

تاخیر در اعلان ها در هر کانال

می توانید یک آرایه را به delay متد ارسال کنید تا مقدار تاخیر را برای کانال های خاص مشخص کنید:

$user->notify((new InvoicePaid($invoice))->delay([
'mail' => now()->addMinutes(5),
'sms' => now()->addMinutes(10),
]));

از طرف دیگر، می توانید withDelay روشی را در خود کلاس اعلان تعریف کنید. متد withDelay باید آرایه ای از نام کانال و مقادیر تاخیر را برگرداند:

/**
* Determine the notification's delivery delay.
*
* @param mixed $notifiable
* @return array
*/
public function withDelay($notifiable)
{
return [
'mail' => now()->addMinutes(5),
'sms' => now()->addMinutes(10),
];
}

سفارشی کردن اتصال صف اعلان

به طور پیش‌فرض، اعلان‌های در صف با استفاده از اتصال صف پیش‌فرض برنامه شما در صف قرار می‌گیرند. اگر می خواهید اتصال متفاوتی را مشخص کنید که باید برای یک اعلان خاص استفاده شود، می توانید یک $connection ویژگی را در کلاس اعلان تعریف کنید:

/**
* The name of the queue connection to use when queueing the notification.
*
* @var string
*/
public $connection = 'redis';

یا اگر می‌خواهید اتصال صف خاصی را مشخص کنید که باید برای هر کانال اعلان پشتیبانی شده توسط اعلان استفاده شود، می‌توانید روشی را viaConnections در اعلان خود تعریف کنید. این روش باید آرایه ای از جفت نام کانال / نام اتصال صف را برگرداند:

/**
* Determine which connections should be used for each notification channel.
*
* @return array
*/
public function viaConnections()
{
return [
'mail' => 'redis',
'database' => 'sync',
];
}

سفارشی کردن صف کانال اطلاع رسانی

اگر می خواهید صف خاصی را مشخص کنید که باید برای هر کانال اعلان پشتیبانی شده توسط اعلان استفاده شود، می توانید روشی را viaQueues در اعلان خود تعریف کنید. این روش باید آرایه ای از جفت نام کانال / نام صف را برگرداند:

/**
* Determine which queues should be used for each notification channel.
*
* @return array
*/
public function viaQueues()
{
return [
'mail' => 'mail-queue',
'slack' => 'slack-queue',
];
}

اعلان ها و معاملات پایگاه داده در صف

هنگامی که اعلان های صف در تراکنش های پایگاه داده ارسال می شوند، ممکن است قبل از انجام تراکنش پایگاه داده توسط صف پردازش شوند. هنگامی که این اتفاق می افتد، هر به روز رسانی که در طول تراکنش پایگاه داده در مدل ها یا رکوردهای پایگاه داده انجام داده اید ممکن است هنوز در پایگاه داده منعکس نشود. علاوه بر این، هر مدل یا رکورد پایگاه داده ایجاد شده در تراکنش ممکن است در پایگاه داده وجود نداشته باشد. اگر اعلان شما به این مدل ها بستگی دارد، هنگام پردازش کاری که اعلان در صف را ارسال می کند، خطاهای غیرمنتظره ای رخ می دهد.

اگر گزینه پیکربندی اتصال صف شما after_commit روی تنظیم شده باشد ، همچنان ممکن است با فراخوانی روش هنگام ارسال اعلان، false نشان دهید که یک اعلان صف خاص باید پس از انجام تمام تراکنش‌های پایگاه داده باز ارسال شود : afterCommit

use App\Notifications\InvoicePaid;
 
$user->notify((new InvoicePaid($invoice))->afterCommit());

از طرف دیگر، می توانید afterCommit متد را از سازنده اعلان خود فراخوانی کنید:

<?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;
 
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct()
{
$this->afterCommit();
}
}

برای کسب اطلاعات بیشتر در مورد کار در مورد این مسائل، لطفاً اسناد مربوط به مشاغل در صف و تراکنش های پایگاه داده را مرور کنید .

تعیین اینکه آیا یک اعلان در صف باید ارسال شود

پس از اینکه یک اعلان در صف برای پردازش پس‌زمینه ارسال شد، معمولاً توسط یک کارگر صف پذیرفته می‌شود و برای گیرنده مورد نظر ارسال می‌شود.

با این حال، اگر می خواهید تصمیم نهایی را در مورد اینکه آیا اعلان در صف باید پس از پردازش توسط یک کارگر صف ارسال شود یا خیر، می توانید روشی را shouldSend در کلاس اطلاع رسانی تعریف کنید. اگر این روش برگردد false ، اعلان ارسال نخواهد شد:

/**
* Determine if the notification should be sent.
*
* @param mixed $notifiable
* @param string $channel
* @return bool
*/
public function shouldSend($notifiable, $channel)
{
return $this->invoice->isPaid();
}

اعلان های درخواستی

گاهی اوقات ممکن است لازم باشد برای شخصی که به عنوان "کاربر" برنامه شما ذخیره نشده است، اعلان ارسال کنید. با استفاده از روش Notification نما route ، می توانید قبل از ارسال اعلان، اطلاعات مسیریابی اعلان موقت را مشخص کنید:

use Illuminate\Broadcasting\Channel;
use Illuminate\Support\Facades\Notification;
 
Notification::route('mail', 'taylor@example.com')
->route('vonage', '5555555555')
->route('slack', 'https://hooks.slack.com/services/...')
->route('broadcast', [new Channel('channel-name')])
->notify(new InvoicePaid($invoice));

اگر می‌خواهید هنگام ارسال اعلان درخواستی به mail مسیر، نام گیرنده را ارائه کنید، می‌توانید آرایه‌ای ارائه کنید که آدرس ایمیل را به عنوان کلید و نام را به عنوان مقدار عنصر اول در آرایه در بر دارد:

Notification::route('mail', [
'barrett@example.com' => 'Barrett Blair',
])->notify(new InvoicePaid($invoice));

اعلان های پستی

قالب بندی پیام های ایمیل

اگر یک اعلان از ارسال به صورت ایمیل پشتیبانی می کند، باید toMail روشی را در کلاس اعلان تعریف کنید. این متد یک $notifiable موجودیت دریافت می کند و باید یک Illuminate\Notifications\Messages\MailMessage نمونه را برگرداند.

این MailMessage کلاس شامل چند روش ساده برای کمک به شما در ساخت پیام‌های ایمیل تراکنشی است. پیام‌های ایمیل ممکن است حاوی خطوط متنی و همچنین یک «تماس برای اقدام» باشند. بیایید نگاهی به یک toMail روش مثال بیندازیم:

/**
* 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!')
->lineIf($this->amount > 0, "Amount paid: {$this->amount}")
->action('View Invoice', $url)
->line('Thank you for using our application!');
}

$this->invoice->id توجه داشته باشید که ما در روش خود استفاده می کنیم toMail . می‌توانید هر داده‌ای را که اعلان شما برای تولید پیام آن نیاز دارد به سازنده اعلان ارسال کنید.

در این مثال، ما یک تبریک، یک خط متن، یک فراخوان برای اقدام و سپس خط دیگری از متن ثبت می کنیم. این روش‌های ارائه شده توسط MailMessage شی، قالب‌بندی ایمیل‌های تراکنشی کوچک را ساده و سریع می‌کند. سپس کانال ایمیل اجزای پیام را به یک قالب ایمیل زیبا و پاسخگو با متن ساده ترجمه می کند. در اینجا نمونه ای از ایمیل ایجاد شده توسط mail کانال آمده است:

هنگام ارسال اعلان نامه، حتماً گزینه پیکربندی را در فایل پیکربندی name خود تنظیم کنید. config/app.php این مقدار در سرصفحه و پاورقی پیام‌های اعلان ایمیل شما استفاده می‌شود.

پیغام خطا

برخی از اعلان ها کاربران را از خطاهایی مانند پرداخت ناموفق فاکتور مطلع می کند. ممکن است با فراخوانی error روش هنگام ساخت پیام خود، نشان دهید که یک پیام ایمیل در مورد خطا است . هنگام استفاده از error روش در یک پیام ایمیل، دکمه تماس برای اقدام به جای سیاه، قرمز خواهد بود:

/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->error()
->subject('Invoice Payment Failed')
->line('...');
}

سایر گزینه های قالب بندی اعلان نامه

به جای تعریف "خطوط" متن در کلاس اعلان، می توانید از این view روش برای تعیین یک الگوی سفارشی استفاده کنید که باید برای ارائه ایمیل اعلان استفاده شود:

/**
* 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]
);
}

می‌توانید با ارسال نام view به عنوان دومین عنصر آرایه‌ای که به متد داده می‌شود، یک نمای متن ساده برای پیام ایمیل تعیین کنید view :

/**
* 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]
);
}

سفارشی کردن فرستنده

به طور پیش فرض، آدرس فرستنده / from ایمیل در config/mail.php فایل پیکربندی تعریف شده است. با این حال، می توانید آدرس from را برای یک اعلان خاص با استفاده از from روش زیر مشخص کنید:

/**
* 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('...');
}

سفارشی کردن گیرنده

هنگام ارسال اعلان ها از طریق mail کانال، سیستم اعلان به طور خودکار به دنبال یک email دارایی در نهاد قابل اطلاع شما می گردد. می‌توانید با تعیین routeNotificationForMail روشی در نهاد قابل اطلاع‌رسانی، آدرس ایمیلی که برای ارسال اعلان استفاده می‌شود، سفارشی کنید :

<?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];
}
}

سفارشی کردن موضوع

به‌طور پیش‌فرض، موضوع ایمیل، نام کلاس اعلان است که به «Title Case» قالب‌بندی شده است. بنابراین، اگر کلاس اعلان شما نام دارد InvoicePaid ، موضوع ایمیل خواهد بود Invoice Paid . اگر می‌خواهید موضوع دیگری را برای پیام تعیین کنید، می‌توانید subject هنگام ساخت پیام خود، این روش را فراخوانی کنید:

/**
* 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('...');
}

سفارشی کردن میلر

به طور پیش فرض، اعلان ایمیل با استفاده از ایمیل پیش فرض تعریف شده در config/mail.php فایل پیکربندی ارسال می شود. با این حال، می‌توانید در زمان اجرا با فراخوانی mailer متد هنگام ساخت پیام خود، یک میلر متفاوت را مشخص کنید:

/**
* 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('...');
}

سفارشی سازی قالب ها

می توانید با انتشار منابع بسته اعلان، الگوی HTML و متن ساده مورد استفاده در اعلان های پستی را تغییر دهید. پس از اجرای این دستور، الگوهای اعلان نامه در resources/views/vendor/notifications دایرکتوری قرار خواهند گرفت:

php artisan vendor:publish --tag=laravel-notifications

پیوست ها

برای افزودن پیوست‌ها به اعلان ایمیل، از این attach روش هنگام ساخت پیام خود استفاده کنید. متد attach مسیر مطلق فایل را به عنوان اولین آرگومان خود می پذیرد:

/**
* 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');
}

روش attach ارائه شده توسط پیام های ایمیل اعلان نیز اشیاء قابل پیوست را می پذیرد . لطفاً برای کسب اطلاعات بیشتر به مستندات شیء قابل پیوست جامع مراجعه کنید .

هنگام پیوست کردن فایل‌ها به پیام، می‌توانید نام نمایشی و/یا نوع MIME را با ارسال یک array آرگومان دوم به attach روش مشخص کنید:

/**
* 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',
]);
}

برخلاف پیوست کردن فایل‌ها در اشیاء پست‌پذیر، نمی‌توانید فایلی را مستقیماً از دیسک ذخیره‌سازی با استفاده از ضمیمه کنید attachFromStorage . بهتر است از attach روشی با یک مسیر مطلق به فایل روی دیسک ذخیره سازی استفاده کنید. از طرف دیگر، می توانید یک mailable را از toMail روش برگردانید:

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');
}

در صورت لزوم، ممکن است چندین فایل با استفاده از روش زیر به یک پیام پیوست شود attachMany :

/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->greeting('Hello!')
->attachMany([
'/path/to/forge.svg',
'/path/to/vapor.svg' => [
'as' => 'Logo.svg',
'mime' => 'image/svg+xml',
],
]);
}

پیوست های داده های خام

این attachData روش ممکن است برای پیوست کردن یک رشته خام از بایت ها به عنوان پیوست استفاده شود. هنگام فراخوانی attachData متد، باید نام فایلی را که باید به پیوست اختصاص داده شود ارائه دهید:

/**
* 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',
]);
}

افزودن برچسب ها و متادیتا

برخی از ارائه‌دهندگان ایمیل شخص ثالث مانند Mailgun و Postmark از پیام‌های «برچسب‌ها» و «متاداده» پشتیبانی می‌کنند، که ممکن است برای گروه‌بندی و ردیابی ایمیل‌های ارسال شده توسط برنامه شما استفاده شوند. می‌توانید برچسب‌ها و ابرداده‌ها را از طریق tag و metadata روش‌های زیر به یک پیام ایمیل اضافه کنید:

/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->greeting('Comment Upvoted!')
->tag('upvote')
->metadata('comment_id', $this->comment->id);
}

اگر برنامه شما از درایور Mailgun استفاده می کند، می توانید برای اطلاعات بیشتر در مورد برچسب ها و ابرداده ها به اسناد Mailgun مراجعه کنید . به همین ترتیب، ممکن است برای اطلاعات بیشتر در مورد پشتیبانی آن‌ها از برچسب‌ها و ابرداده، از اسناد Postmark نیز استفاده شود .

اگر برنامه شما از آمازون SES برای ارسال ایمیل استفاده می کند، باید از metadata روشی برای پیوست کردن "برچسب ها" SES به پیام استفاده کنید.

سفارشی کردن پیام سیمفونی

متد withSymfonyMessage کلاس MailMessage به شما اجازه می دهد تا یک بسته را ثبت کنید که قبل از ارسال پیام با نمونه پیام Symfony فراخوانی می شود. این به شما فرصتی می دهد تا پیام را قبل از تحویل عمیقاً شخصی سازی کنید:

use Symfony\Component\Mime\Email;
 
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->withSymfonyMessage(function (Email $message) {
$message->getHeaders()->addTextHeader(
'Custom-Header', 'Header Value'
);
});
}

استفاده از Mailables

در صورت نیاز، می توانید یک شیء قابل ارسال کامل را از روش اعلان خود برگردانید toMail . هنگام برگرداندن a Mailable به جای a MailMessage ، باید گیرنده پیام را با استفاده از to روش شیء ارسالی مشخص کنید:

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);
}

ایمیل‌ها و اعلان‌های درخواستی

اگر در حال ارسال اعلان درخواستی هستید ، $notifiable نمونه ای که به toMail روش داده شده است نمونه ای از روشی Illuminate\Notifications\AnonymousNotifiable است که routeNotificationFor ممکن است برای بازیابی آدرس ایمیلی که اعلان درخواستی باید به آن ارسال شود، استفاده شود:

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);
}

پیش نمایش اعلان های ایمیل

هنگام طراحی یک الگوی اعلان نامه، آسان است که به سرعت پیام ایمیل ارائه شده را در مرورگر خود مانند یک الگوی معمولی Blade پیش نمایش کنید. به همین دلیل، لاراول به شما این امکان را می‌دهد که هر پیام ایمیلی را که توسط یک اعلان ایمیل ایجاد شده است، مستقیماً از بسته شدن مسیر یا کنترلر برگردانید. هنگامی که a MailMessage برگردانده می شود، نمایش داده می شود و در مرورگر نمایش داده می شود و به شما این امکان را می دهد که به سرعت طرح آن را بدون نیاز به ارسال آن به آدرس ایمیل واقعی، پیش نمایش کنید:

use App\Models\Invoice;
use App\Notifications\InvoicePaid;
 
Route::get('/notification', function () {
$invoice = Invoice::find(1);
 
return (new InvoicePaid($invoice))
->toMail($invoice->user);
});

اعلان‌های ایمیل Markdown

اعلان‌های ایمیل Markdown به شما این امکان را می‌دهند که از الگوهای از پیش ساخته شده اعلان‌های ایمیل استفاده کنید، در حالی که به شما آزادی بیشتری برای نوشتن پیام‌های سفارشی و طولانی‌تر می‌دهد. از آنجایی که پیام‌ها در Markdown نوشته می‌شوند، لاراول می‌تواند قالب‌های زیبا و پاسخ‌گوی HTML را برای پیام‌ها ارائه کند و در عین حال به‌طور خودکار یک متن ساده نیز تولید کند.

تولید پیام

برای ایجاد یک اعلان با یک الگوی Markdown مربوطه، می توانید --markdown از گزینه make:notification دستور Artisan استفاده کنید:

php artisan make:notification InvoicePaid --markdown=mail.invoice.paid

مانند سایر اعلان‌های ایمیل، اعلان‌هایی که از الگوهای Markdown استفاده می‌کنند باید toMail روشی را در کلاس اعلان خود تعریف کنند. با این حال، به جای استفاده از متدهای line و action برای ساخت اعلان، از markdown روشی برای تعیین نام الگوی Markdown که باید استفاده شود استفاده کنید. آرایه ای از داده هایی که می خواهید در دسترس الگو قرار دهید ممکن است به عنوان آرگومان دوم متد ارسال شود:

/**
* 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]);
}

نوشتن پیام

اعلان‌های ایمیل Markdown از ترکیبی از اجزای Blade و نحو Markdown استفاده می‌کنند که به شما امکان می‌دهد به راحتی اعلان‌ها را بسازید در حالی که از اجزای اعلان از پیش ساخته شده لاراول استفاده می‌کنید:

<x-mail::message>
# Invoice Paid
 
Your invoice has been paid!
 
<x-mail::button :url="$url">
View Invoice
</x-mail::button>
 
Thanks,<br>
{{ config('app.name') }}
</x-mail::message>

جزء دکمه

جزء دکمه یک پیوند دکمه مرکزی را ارائه می دهد. مؤلفه دو آرگومان a url و اختیاری را می پذیرد color . رنگ های پشتیبانی شده عبارتند از primary , green , و red . می‌توانید به تعداد دلخواه اجزای دکمه را به یک اعلان اضافه کنید:

<x-mail::button :url="$url" color="green">
View Invoice
</x-mail::button>

جزء پنل

مؤلفه پانل بلوک متن داده شده را در پانلی ارائه می کند که رنگ پس زمینه کمی متفاوت از بقیه اعلان دارد. این به شما امکان می دهد توجه را به یک بلوک متن معین جلب کنید:

<x-mail::panel>
This is the panel content.
</x-mail::panel>

جزء جدول

جزء جدول به شما امکان می دهد یک جدول Markdown را به یک جدول HTML تبدیل کنید. کامپوننت جدول Markdown را به عنوان محتوای خود می پذیرد. تراز ستون جدول با استفاده از نحو پیش فرض تراز جدول Markdown پشتیبانی می شود:

<x-mail::table>
| Laravel | Table | Example |
| ------------- |:-------------:| --------:|
| Col 2 is | Centered | $10 |
| Col 3 is | Right-Aligned | $20 |
</x-mail::table>

سفارشی سازی کامپوننت ها

شما می توانید تمام اجزای اعلان Markdown را برای سفارشی سازی به برنامه خود صادر کنید. برای صادرات کامپوننت ها، از vendor:publish دستور Artisan برای انتشار laravel-mail تگ دارایی استفاده کنید:

php artisan vendor:publish --tag=laravel-mail

این دستور اجزای ایمیل Markdown را در resources/views/vendor/mail دایرکتوری منتشر می کند. دایرکتوری mail شامل یک دایرکتوری html و یک text دایرکتوری خواهد بود که هر کدام شامل نمایش های مربوط به هر جزء موجود می باشد. شما آزاد هستید که این اجزا را هر طور که دوست دارید سفارشی کنید.

سفارشی کردن CSS

پس از صادرات اجزاء، resources/views/vendor/mail/html/themes دایرکتوری حاوی یک default.css فایل خواهد بود. می‌توانید CSS را در این فایل سفارشی کنید و سبک‌های شما به‌طور خودکار در نمایش‌های HTML اعلان‌های Markdown شما قرار می‌گیرد.

اگر می‌خواهید یک موضوع کاملاً جدید برای اجزای Markdown لاراول بسازید، می‌توانید یک فایل CSS را در html/themes دایرکتوری قرار دهید. پس از نامگذاری و ذخیره فایل CSS، theme گزینه mail فایل پیکربندی را به روز کنید تا با نام تم جدید شما مطابقت داشته باشد.

برای سفارشی کردن طرح زمینه برای یک اعلان فردی، می‌توانید theme هنگام ساخت پیام ایمیل اعلان، روش را فراخوانی کنید. این theme روش نام موضوعی را می‌پذیرد که باید هنگام ارسال اعلان استفاده شود:

/**
* 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]);
}

اطلاعیه های پایگاه داده

پیش نیازها

کانال database اطلاع رسانی اطلاعات اعلان را در یک جدول پایگاه داده ذخیره می کند. این جدول حاوی اطلاعاتی مانند نوع اعلان و همچنین ساختار داده JSON است که اعلان را توصیف می کند.

می توانید جدول را برای نمایش اعلان ها در رابط کاربری برنامه خود جستجو کنید. اما قبل از اینکه بتوانید این کار را انجام دهید، باید یک جدول پایگاه داده ایجاد کنید تا اعلان های خود را نگه دارید. می توانید از notifications:table دستور برای ایجاد یک مهاجرت با طرح جدول مناسب استفاده کنید:

php artisan notifications:table
 
php artisan migrate

قالب بندی اطلاعیه های پایگاه داده

اگر یک اعلان از ذخیره شدن در جدول پایگاه داده پشتیبانی می کند، باید یک toDatabase یا toArray متد را در کلاس اعلان تعریف کنید. این متد یک موجودیت دریافت می کند $notifiable و باید یک آرایه PHP ساده را برگرداند. آرایه برگشتی به صورت JSON کدگذاری شده و در data ستون جدول شما ذخیره می شود notifications . بیایید نگاهی به یک toArray روش مثال بیندازیم:

/**
* 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 در مقابل. toArray

این toArray روش همچنین توسط broadcast کانال برای تعیین اینکه کدام داده‌ها را به جلویی با جاوا اسکریپت شما پخش می‌کند استفاده می‌شود. اگر می خواهید دو نمایش آرایه متفاوت برای کانال database و و داشته باشید broadcast ، باید یک toDatabase متد را به جای toArray متد تعریف کنید.

دسترسی به اعلان ها

هنگامی که اعلان‌ها در پایگاه داده ذخیره می‌شوند، به یک راه راحت برای دسترسی به آن‌ها از موجودیت‌های قابل اطلاع خود نیاز دارید. این Illuminate\Notifications\Notifiable ویژگی که در مدل پیش‌فرض لاراول گنجانده شده است App\Models\User ، شامل یک notifications رابطه Eloquent است که اعلان‌ها را برای موجودیت بازمی‌گرداند. برای واکشی اعلان‌ها، می‌توانید به این روش مانند هر رابطه Eloquent دیگری دسترسی داشته باشید. به‌طور پیش‌فرض، اعلان‌ها براساس created_at مهر زمانی با آخرین اعلان‌ها در ابتدای مجموعه مرتب می‌شوند :

$user = App\Models\User::find(1);
 
foreach ($user->notifications as $notification) {
echo $notification->type;
}

اگر می‌خواهید فقط اعلان‌های «خوانده نشده» را بازیابی کنید، می‌توانید از unreadNotifications رابطه استفاده کنید. مجدداً، این اعلان‌ها بر اساس created_at مهر زمانی با آخرین اعلان‌ها در ابتدای مجموعه مرتب می‌شوند :

$user = App\Models\User::find(1);
 
foreach ($user->unreadNotifications as $notification) {
echo $notification->type;
}

برای دسترسی به اعلان‌های خود از کلاینت جاوا اسکریپت، باید یک کنترل‌کننده اعلان برای برنامه خود تعریف کنید که اعلان‌ها را برای یک موجودیت اعلان‌پذیر، مانند کاربر فعلی، برمی‌گرداند. سپس می توانید یک درخواست HTTP به URL آن کنترل کننده از کلاینت جاوا اسکریپت خود ارسال کنید.

علامت گذاری اعلان ها به عنوان خوانده شده

به طور معمول، زمانی که کاربر یک اعلان را مشاهده می کند، می خواهید آن را به عنوان "خوانده شده" علامت گذاری کنید. این Illuminate\Notifications\Notifiable ویژگی markAsRead روشی را ارائه می دهد که read_at ستون را در رکورد پایگاه داده اعلان به روز می کند:

$user = App\Models\User::find(1);
 
foreach ($user->unreadNotifications as $notification) {
$notification->markAsRead();
}

با این حال، به جای حلقه زدن در هر اعلان، می توانید از این markAsRead روش مستقیماً در مجموعه ای از اعلان ها استفاده کنید:

$user->unreadNotifications->markAsRead();

همچنین می‌توانید از یک درخواست به‌روزرسانی انبوه برای علامت‌گذاری همه اعلان‌ها به عنوان خوانده‌شده بدون بازیابی آنها از پایگاه داده استفاده کنید:

$user = App\Models\User::find(1);
 
$user->unreadNotifications()->update(['read_at' => now()]);

می‌توانید delete اعلان‌ها را به‌طور کامل از جدول حذف کنید:

$user->notifications()->delete();

اطلاعیه های پخش

پیش نیازها

قبل از پخش اعلان‌ها، باید سرویس‌های پخش رویداد لاراول را پیکربندی کرده و با آن آشنا باشید . پخش رویداد راهی برای واکنش به رویدادهای Laravel سمت سرور از پیشانی دارای جاوا اسکریپت شما فراهم می کند.

قالب بندی اعلان های پخش

این کانال با استفاده از سرویس‌های پخش رویداد broadcast لاراول، اعلان‌ها را پخش می‌کند ، و به صفحه‌نمایش دارای جاوا اسکریپت شما اجازه می‌دهد تا اعلان‌ها را در زمان واقعی دریافت کند. اگر یک اعلان از پخش پشتیبانی می کند، می توانید روشی را در کلاس اعلان تعریف کنید. این روش یک موجودیت دریافت می کند و باید یک نمونه را برگرداند. اگر روش وجود نداشته باشد، از این روش برای جمع آوری داده هایی که باید پخش شوند استفاده می شود. داده های برگردانده شده به صورت JSON کدگذاری می شوند و در بخش جلویی با جاوا اسکریپت شما پخش می شوند. بیایید نگاهی به یک روش مثال بیندازیم: toBroadcast $notifiable BroadcastMessage toBroadcast toArray toBroadcast

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,
]);
}

پیکربندی صف پخش

همه اعلان های پخش برای پخش در صف قرار می گیرند. اگر می‌خواهید اتصال صف یا نام صفی را که برای صف‌بندی عملیات پخش استفاده می‌شود پیکربندی کنید، می‌توانید از onConnection و onQueue روش‌های زیر استفاده کنید BroadcastMessage :

return (new BroadcastMessage($data))
->onConnection('sqs')
->onQueue('broadcasts');

سفارشی کردن نوع اعلان

علاوه بر داده‌هایی که مشخص می‌کنید، همه اعلان‌های پخش همچنین دارای یک type فیلد حاوی نام کلاس کامل اعلان هستند. اگر می خواهید اعلان را سفارشی کنید type ، می توانید broadcastType روشی را در کلاس اعلان تعریف کنید:

use Illuminate\Notifications\Messages\BroadcastMessage;
 
/**
* Get the type of the notification being broadcast.
*
* @return string
*/
public function broadcastType()
{
return 'broadcast.message';
}

گوش دادن برای اعلان ها

اعلان ها در یک کانال خصوصی که با استفاده از یک {notifiable}.{id} کنوانسیون قالب بندی شده است پخش می شود. بنابراین، اگر برای App\Models\User نمونه ای با شناسه اعلان ارسال می کنید 1 ، اعلان در App.Models.User.1 کانال خصوصی پخش می شود. هنگام استفاده از Laravel Echo ، می‌توانید به راحتی به اعلان‌های یک کانال با استفاده از notification روش زیر گوش دهید:

Echo.private('App.Models.User.' + userId)
.notification((notification) => {
console.log(notification.type);
});

سفارشی کردن کانال اطلاع رسانی

اگر می‌خواهید شخصی‌سازی کنید که اعلان‌های پخش یک نهاد در کدام کانال پخش می‌شود، می‌توانید روشی را receivesBroadcastNotificationsOn در نهاد قابل اطلاع تعریف کنید:

<?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;
}
}

اعلان های پیامکی

پیش نیازها

ارسال اعلان‌های پیامکی در لاراول توسط Vonage (که قبلاً Nexmo نامیده می‌شد) پشتیبانی می‌شود. قبل از اینکه بتوانید اعلان‌ها را از طریق Vonage ارسال کنید، باید بسته‌های laravel/vonage-notification-channel و را نصب کنید guzzlehttp/guzzle :

composer require laravel/vonage-notification-channel guzzlehttp/guzzle

بسته شامل یک فایل پیکربندی است . با این حال، لازم نیست این فایل پیکربندی را به برنامه خود صادر کنید. شما به سادگی می توانید از متغیرهای محیط VONAGE_KEY و VONAGE_SECRET برای تعریف کلیدهای عمومی و مخفی Vonage خود استفاده کنید.

پس از تعریف کلیدهای خود، باید یک VONAGE_SMS_FROM متغیر محیطی تنظیم کنید که شماره تلفنی را که پیام های SMS شما باید از آن ارسال شود، به طور پیش فرض تعیین می کند. می توانید این شماره تلفن را در کنترل پنل Vonage ایجاد کنید:

VONAGE_SMS_FROM=15556666666

قالب بندی اعلان های پیامکی

اگر یک اعلان از ارسال به صورت پیامک پشتیبانی می کند، باید toVonage روشی را در کلاس اعلان تعریف کنید. این متد یک $notifiable موجودیت دریافت می کند و باید یک Illuminate\Notifications\Messages\VonageMessage نمونه را برگرداند:

/**
* Get the Vonage / SMS representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\VonageMessage
*/
public function toVonage($notifiable)
{
return (new VonageMessage)
->content('Your SMS message content');
}

محتوای یونیکد

اگر پیام اس ام اس شما حاوی کاراکترهای یونیکد است، باید unicode در هنگام ساختن VonageMessage نمونه، متد را فراخوانی کنید:

/**
* Get the Vonage / SMS representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\VonageMessage
*/
public function toVonage($notifiable)
{
return (new VonageMessage)
->content('Your unicode message')
->unicode();
}

سفارشی کردن شماره "از".

اگر می‌خواهید برخی از اعلان‌ها را از شماره تلفنی که با شماره تلفن مشخص‌شده توسط VONAGE_SMS_FROM متغیر محیطی شما متفاوت است ارسال کنید، می‌توانید from در یک VonageMessage نمونه با روش تماس بگیرید:

/**
* Get the Vonage / SMS representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\VonageMessage
*/
public function toVonage($notifiable)
{
return (new VonageMessage)
->content('Your SMS message content')
->from('15554443333');
}

اضافه کردن یک مرجع مشتری

اگر می‌خواهید هزینه‌های هر کاربر، تیم یا مشتری را پیگیری کنید، می‌توانید «مرجع مشتری» را به اعلان اضافه کنید. Vonage به شما این امکان را می دهد که با استفاده از این مرجع مشتری گزارش تولید کنید تا بتوانید میزان استفاده از پیامک مشتری خاص را بهتر درک کنید. مرجع مشتری می تواند هر رشته ای تا 40 کاراکتر باشد:

/**
* Get the Vonage / SMS representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\VonageMessage
*/
public function toVonage($notifiable)
{
return (new VonageMessage)
->clientReference((string) $notifiable->id)
->content('Your SMS message content');
}

مسیریابی اعلان های پیامکی

برای هدایت اعلان‌های Vonage به شماره تلفن مناسب، روشی را routeNotificationForVonage در نهاد قابل اطلاع خود تعریف کنید:

<?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 Vonage channel.
*
* @param \Illuminate\Notifications\Notification $notification
* @return string
*/
public function routeNotificationForVonage($notification)
{
return $this->phone_number;
}
}

Slack Notifications

پیش نیازها

قبل از اینکه بتوانید اعلان‌ها را از طریق Slack ارسال کنید، باید کانال اعلان Slack را از طریق Composer نصب کنید:

composer require laravel/slack-notification-channel

همچنین باید یک برنامه Slack برای تیم خود ایجاد کنید. پس از ایجاد برنامه، باید یک "Webhook ورودی" را برای فضای کاری پیکربندی کنید. سپس Slack یک نشانی اینترنتی webhook در اختیار شما قرار می‌دهد که می‌توانید هنگام مسیریابی اعلان‌های Slack از آن استفاده کنید .

قالب بندی Slack Notifications

اگر یک اعلان از ارسال به عنوان پیام Slack پشتیبانی می کند، باید toSlack روشی را در کلاس اعلان تعریف کنید. این متد یک $notifiable موجودیت دریافت می کند و باید یک Illuminate\Notifications\Messages\SlackMessage نمونه را برگرداند. پیام‌های شل ممکن است حاوی محتوای متنی و همچنین یک «پیوست» باشد که متن اضافی یا مجموعه‌ای از فیلدها را قالب‌بندی می‌کند. بیایید به یک toSlack مثال اساسی نگاهی بیندازیم:

/**
* 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!');
}

پیوست های شل

همچنین می‌توانید «پیوست‌ها» را به پیام‌های Slack اضافه کنید. پیوست ها گزینه های قالب بندی غنی تری نسبت به پیام های متنی ساده ارائه می دهند. در این مثال، ما یک اعلان خطا در مورد استثنایی که در یک برنامه رخ داده است، از جمله پیوندی برای مشاهده جزئیات بیشتر در مورد استثنا ارسال می کنیم:

/**
* 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.');
});
}

ضمیمه ها همچنین به شما امکان می دهند آرایه ای از داده ها را مشخص کنید که باید به کاربر ارائه شود. داده های داده شده در قالب جدولی برای خواندن آسان ارائه می شود:

/**
* 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:',
]);
});
}

محتوای پیوست Markdown

اگر برخی از فیلدهای پیوست شما حاوی Markdown هستند، می توانید از روشی markdown برای دستور دادن به Slack برای تجزیه و نمایش فیلدهای پیوست داده شده به عنوان متن فرمت شده Markdown استفاده کنید. مقادیر پذیرفته شده توسط این روش عبارتند از: pretext , text و / یا fields . برای اطلاعات بیشتر در مورد قالب بندی پیوست Slack، مستندات Slack API را بررسی کنید :

/**
* 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']);
});
}

مسیریابی Slack Notifications

برای هدایت اعلان‌های Slack به تیم و کانال مناسب Slack، روشی را routeNotificationForSlack در نهاد قابل اطلاع خود تعریف کنید. این باید نشانی وب هوک را که اعلان باید به آن تحویل داده شود، بازگرداند. URL های Webhook ممکن است با افزودن یک سرویس "Incoming Webhook" به تیم Slack شما ایجاد شوند:

<?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/...';
}
}

بومی سازی اعلان ها

لاراول به شما این امکان را می دهد که اعلان ها را در محلی غیر از محلی فعلی درخواست HTTP ارسال کنید و حتی اگر اعلان در صف قرار گیرد، این منطقه را به خاطر می آورد.

برای انجام این کار، کلاس روشی برای تنظیم زبان مورد نظر Illuminate\Notifications\Notification ارائه می دهد . locale هنگامی که اعلان ارزیابی می شود، برنامه به این منطقه تغییر می کند و پس از تکمیل ارزیابی، به محلی قبلی باز می گردد:

$user->notify((new InvoicePaid($invoice))->locale('es'));

بومی سازی چندین ورودی قابل اطلاع ممکن است از طریق Notification نما نیز حاصل شود:

Notification::locale('es')->send(
$users, new InvoicePaid($invoice)
);

لوکال های برگزیده کاربر

گاهی اوقات، برنامه ها محلی مورد نظر هر کاربر را ذخیره می کنند. با اجرای HasLocalePreference قرارداد بر روی مدل قابل اطلاع رسانی خود، می توانید به لاراول دستور دهید هنگام ارسال اعلان از این محلی ذخیره شده استفاده کند:

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;
}
}

هنگامی که رابط را پیاده سازی کردید، لاراول به طور خودکار از محلی ترجیحی در هنگام ارسال اعلان ها و فایل های پستی به مدل استفاده می کند. بنابراین، locale هنگام استفاده از این رابط، نیازی به فراخوانی متد نیست :

$user->notify(new InvoicePaid($invoice));

رویدادهای اطلاع رسانی

رویداد ارسال اعلان

هنگامی که یک اعلان ارسال می شود، Illuminate\Notifications\Events\NotificationSending رویداد توسط سیستم اعلان ارسال می شود. این شامل نهاد "اعلان پذیر" و خود نمونه اعلان است. می توانید شنوندگان را برای این رویداد در برنامه خود ثبت کنید EventServiceProvider :

use App\Listeners\CheckNotificationStatus;
use Illuminate\Notifications\Events\NotificationSending;
 
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
NotificationSending::class => [
CheckNotificationStatus::class,
],
];

اگر شنونده رویداد برای رویداد از روش خود NotificationSending بازگردد، اعلان ارسال نخواهد شد : false handle

use Illuminate\Notifications\Events\NotificationSending;
 
/**
* Handle the event.
*
* @param \Illuminate\Notifications\Events\NotificationSending $event
* @return void
*/
public function handle(NotificationSending $event)
{
return false;
}

در شنونده رویداد، می‌توانید به notifiable , notification و channel ویژگی‌های رویداد دسترسی داشته باشید تا درباره گیرنده اعلان یا خود اعلان بیشتر بدانید:

/**
* Handle the event.
*
* @param \Illuminate\Notifications\Events\NotificationSending $event
* @return void
*/
public function handle(NotificationSending $event)
{
// $event->channel
// $event->notifiable
// $event->notification
}

اعلان ارسال شد رویداد

هنگامی که یک اعلان ارسال می شود، Illuminate\Notifications\Events\NotificationSent رویداد توسط سیستم اطلاع رسانی ارسال می شود. این شامل نهاد "اعلان پذیر" و خود نمونه اعلان است. شما می توانید شنوندگان را برای این رویداد در سایت خود ثبت کنید EventServiceProvider :

use App\Listeners\LogNotification;
use Illuminate\Notifications\Events\NotificationSent;
 
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
NotificationSent::class => [
LogNotification::class,
],
];

پس از ثبت شنوندگان در خود EventServiceProvider ، از event:generate دستور Artisan برای تولید سریع کلاس های شنونده استفاده کنید.

در شنونده رویداد، می‌توانید به notifiable , notification , channel و response ویژگی‌های رویداد دسترسی داشته باشید تا درباره گیرنده اعلان یا خود اعلان بیشتر بدانید:

/**
* Handle the event.
*
* @param \Illuminate\Notifications\Events\NotificationSent $event
* @return void
*/
public function handle(NotificationSent $event)
{
// $event->channel
// $event->notifiable
// $event->notification
// $event->response
}

کانال های سفارشی

لاراول با تعداد انگشت شماری کانال اعلان عرضه می شود، اما ممکن است بخواهید درایورهای خود را برای ارسال اعلان ها از طریق کانال های دیگر بنویسید. لاراول آن را ساده می کند. برای شروع، کلاسی را تعریف کنید که حاوی send متد باشد. متد باید دو آرگومان دریافت کند: a $notifiable و a $notification .

در این send روش، می‌توانید روش‌هایی را در اعلان فراخوانی کنید تا یک شیء پیام را که توسط کانال شما قابل درک است بازیابی کنید و سپس اعلان را $notifiable هر طور که می‌خواهید به نمونه ارسال کنید:

<?php
 
namespace App\Notifications;
 
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...
}
}

هنگامی که کلاس کانال اطلاع رسانی شما تعریف شد، می توانید نام کلاس را از via روش هر یک از اعلان های خود برگردانید. در این مثال، toVoice روش اعلان شما می‌تواند هر شیئی را که برای نمایش پیام‌های صوتی انتخاب می‌کنید، برگرداند. برای مثال، ممکن است کلاس خود را VoiceMessage برای نمایش این پیام ها تعریف کنید:

<?php
 
namespace App\Notifications;
 
use App\Notifications\Messages\VoiceMessage;
use App\Notifications\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)
{
// ...
}
}