اطلاعیه
- معرفی
- ایجاد اعلان ها
- ارسال اعلان ها
- اعلان های پستی
- اعلانهای ایمیل Markdown
- اطلاعیه های پایگاه داده
- اطلاعیه های پخش
- اعلان های پیامکی
- Slack Notifications
- بومی سازی اعلان ها
- رویدادهای اطلاع رسانی
- کانال های سفارشی
معرفی
لاراول علاوه بر پشتیبانی از ارسال ایمیل ، از ارسال اعلانها در انواع کانالهای تحویل، از جمله ایمیل، پیامک (از طریق Vonage ، که قبلاً Nexmo نامیده میشد) و Slack پشتیبانی میکند . اعلان ها همچنین ممکن است در یک پایگاه داده ذخیره شوند تا در رابط وب شما نمایش داده شوند.
به طور معمول، اعلانها باید پیامهای کوتاه و اطلاعاتی باشند که کاربران را از اتفاقی که در برنامه شما رخ داده است مطلع میکند. به عنوان مثال، اگر در حال نوشتن یک برنامه صورتحساب هستید، ممکن است از طریق کانال های ایمیل و پیامک، اعلان «فاکتور پرداخت شده» را برای کاربران خود ارسال کنید.
ایجاد اعلان ها
در لاراول، هر اعلان توسط یک کلاس نمایش داده می شود (معمولاً در
app/Notifications
دایرکتوری ذخیره می شود).
اگر این دایرکتوری را در برنامه خود نمی بینید نگران نباشید، با اجرای
make:notification
دستور Artisan برای شما ایجاد می شود:
php artisan make:notification InvoicePaid
این دستور یک کلاس نوتیفیکیشن تازه را در
app/Notifications
دایرکتوری شما قرار می دهد.
هر کلاس اعلان شامل یک
via
متد و تعداد متغیری از متدهای ساخت پیام (مانند
toMail
یا
toDatabase
) است که اعلان را به پیامی بهینه شده برای آن کانال خاص تبدیل می کند.
ارسال اعلان ها
استفاده از ویژگی Notifiable Trait
اعلان ها ممکن است به دو صورت ارسال شوند: با استفاده از
notify
روش صفت
Notifiable
یا استفاده از
Notification
نما
.
ابتدا بیایید با استفاده از این ویژگی را بررسی کنیم:
<?php namespace App; use Illuminate\Foundation\Auth\User as Authenticatable;use Illuminate\Notifications\Notifiable; class User extends Authenticatable{ use Notifiable;}
این ویژگی توسط
App\User
مدل پیشفرض استفاده میشود و حاوی یک روش است که ممکن است برای ارسال
اعلانها استفاده شود:
notify
.
این
notify
روش انتظار دارد یک نمونه اعلان دریافت کند:
use App\Notifications\InvoicePaid; $user->notify(new InvoicePaid($invoice));
به یاد داشته باشید، می توانید از این
Illuminate\Notifications\Notifiable
ویژگی در هر یک از مدل های خود استفاده کنید. شما محدود به گنجاندن آن در مدل خود نیستیدUser
.
با استفاده از نمای اعلان
همچنین، میتوانید اعلانها را از طریق
Notification
نما
ارسال کنید .
این در درجه اول زمانی مفید است که شما نیاز به ارسال اعلان به چندین نهاد
قابل اطلاع رسانی مانند مجموعه ای از کاربران دارید.
برای ارسال اعلانها با استفاده از نما، تمام نهادهای قابل اطلاع و نمونه
اعلان را به
send
روش ارسال کنید:
Notification::send($users, new InvoicePaid($invoice));
تعیین کانال های تحویل
هر کلاس اطلاع رسانی
via
روشی دارد که تعیین می کند اعلان در کدام کانال ارسال می شود.
اعلانها ممکن است
در کانالها،،،،
mail
و
ارسال
شوند
.
database
broadcast
nexmo
slack
اگر میخواهید از کانالهای تحویل دیگر مانند تلگرام یا Pusher استفاده کنید، وبسایت کانالهای اطلاع رسانی لاراول را بررسی کنید .
متد
via
یک
$notifiable
نمونه دریافت می کند که نمونه ای از کلاسی است که اعلان به آن ارسال می شود.
$notifiable
برای تعیین اینکه اعلان باید در کدام کانال ها ارسال شود،
می توانید استفاده کنید :
/** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */public function via($notifiable){ return $notifiable->prefers_sms ? ['nexmo'] : ['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
به نمونه اعلان خود زنجیره بزنید:
$when = now()->addMinutes(10); $user->notify((new InvoicePaid($invoice))->delay($when));
سفارشی کردن صف کانال اطلاع رسانی
اگر می خواهید صف خاصی را مشخص کنید که باید برای هر کانال اعلان پشتیبانی
شده توسط اعلان استفاده شود، می توانید روشی را
viaQueues
در اعلان خود تعریف کنید.
این روش باید آرایه ای از جفت نام کانال / نام صف را برگرداند:
/** * Determine which queues should be used for each notification channel. * * @return array */public function viaQueues(){ return [ 'mail' => 'mail-queue', 'slack' => 'slack-queue', ];}
اعلان های درخواستی
گاهی اوقات ممکن است لازم باشد برای شخصی که به عنوان "کاربر" برنامه شما
ذخیره نشده است، اعلان ارسال کنید.
با استفاده از
Notification::route
روش نما، می توانید قبل از ارسال اعلان، اطلاعات مسیریابی اعلان موقت را
مشخص کنید:
Notification::route('mail', 'taylor@example.com') ->route('nexmo', '5555555555') ->route('slack', 'https://hooks.slack.com/services/...') ->notify(new InvoicePaid($invoice));
اعلان های پستی
قالب بندی پیام های ایمیل
اگر یک اعلان از ارسال به صورت ایمیل پشتیبانی می کند، باید
toMail
روشی را در کلاس اعلان تعریف کنید.
این روش یک
$notifiable
موجودیت دریافت می کند و باید یک
Illuminate\Notifications\Messages\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!') ->action('View Invoice', $url) ->line('Thank you for using our application!');}
$this->invoice->id
توجه داشته باشید که ما در روش خود استفاده می کنیمtoMail
. میتوانید هر دادهای را که اعلان شما برای تولید پیام آن نیاز دارد به سازنده اعلان ارسال کنید.
در این مثال، ما یک تبریک، یک خط متن، یک فراخوان برای اقدام و سپس خط دیگری
از متن ثبت می کنیم.
این روشهای ارائه شده توسط
MailMessage
شی، قالببندی ایمیلهای تراکنشی کوچک را ساده و سریع میکند.
سپس کانال ایمیل اجزای پیام را به یک الگوی ایمیل HTML زیبا و پاسخگو با
همتای متن ساده ترجمه می کند.
در اینجا نمونه ای از ایمیل ایجاد شده توسط
mail
کانال آمده است:

هنگام ارسال اعلان نامه، حتما مقدار را در فایل پیکربندی
name
خود تنظیم کنید.config/app.php
این مقدار در سرصفحه و پاورقی پیامهای اعلان ایمیل شما استفاده میشود.
سایر گزینه های قالب بندی اطلاعیه
به جای تعریف "خطوط" متن در کلاس اعلان، می توانید از
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 به عنوان دومین عنصر آرایهای که به متد
داده میشود، یک نمای متن ساده برای پیام ایمیل تعیین کنید
MailMessage
:
/** * 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] );}
علاوه بر این، می توانید یک
شیء کامل پستی را
از
toMail
متد برگردانید:
use App\Mail\InvoicePaid as Mailable; /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return Mailable */public function toMail($notifiable){ return (new Mailable($this->invoice))->to($notifiable->email);}
پیغام خطا
برخی از اعلان ها کاربران را از خطاهایی مانند پرداخت ناموفق فاکتور مطلع می
کند.
error
ممکن است با فراخوانی روش هنگام ساخت پیام خود،
نشان دهید که یک پیام ایمیل در مورد خطا است .
هنگام استفاده از
error
روش در یک پیام ایمیل، دکمه تماس برای اقدام به جای آبی قرمز خواهد بود:
/** * 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('...');}
سفارشی کردن فرستنده
به طور پیش فرض، آدرس فرستنده / 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('test@example.com', 'Example') ->line('...');}
سفارشی کردن گیرنده
هنگام ارسال اعلان ها از طریق
mail
کانال، سیستم اعلان به طور خودکار به دنبال یک
email
دارایی در نهاد قابل اطلاع شما می گردد.
routeNotificationForMail
میتوانید با تعریف روشی در نهاد
، آدرس ایمیلی که برای ارسال اعلان استفاده میشود را سفارشی کنید :
<?php namespace App; 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 name and email address... return [$this->email_address => $this->name]; }}
سفارشی کردن موضوع
بهطور پیشفرض، موضوع ایمیل، نام کلاس اعلان است که به «مورد عنوان»
قالببندی شده است.
بنابراین، اگر کلاس اعلان شما نام دارد
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
پیش نمایش اعلان های ایمیل
هنگام طراحی یک الگوی اعلان نامه، آسان است که به سرعت پیام ایمیل ارائه شده
را در مرورگر خود مانند یک الگوی معمولی Blade پیش نمایش کنید.
به همین دلیل، لاراول به شما این امکان را می دهد که هر پیام ایمیلی را که
توسط یک اعلان ایمیل ایجاد شده است، مستقیماً از یک مسیر بسته یا کنترلر برگردانید.
هنگامی که a
MailMessage
برگردانده می شود، نمایش داده می شود و در مرورگر نمایش داده می شود و به
شما این امکان را می دهد که به سرعت طرح آن را بدون نیاز به ارسال آن به آدرس ایمیل واقعی، پیش نمایش کنید:
Route::get('mail', function () { $invoice = App\Invoice::find(1); return (new App\Notifications\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 استفاده میکنند که به شما امکان میدهد به راحتی اعلانها را بسازید در حالی که از اجزای اعلان از پیش ساخته شده لاراول استفاده میکنید:
@component('mail::message')# Invoice Paid Your invoice has been paid! @component('mail::button', ['url' => $url])View Invoice@endcomponent Thanks,<br>{{ config('app.name') }}@endcomponent
جزء دکمه
جزء دکمه یک پیوند دکمه مرکزی را ارائه می دهد.
مؤلفه دو آرگومان a
url
و اختیاری را می پذیرد
color
.
رنگ های پشتیبانی شده عبارتند از
blue
,
green
, و
red
.
میتوانید به تعداد دلخواه اجزای دکمه را به یک اعلان اضافه کنید:
@component('mail::button', ['url' => $url, 'color' => 'green'])View Invoice@endcomponent
جزء پنل
مؤلفه پانل بلوک متن داده شده را در پانلی ارائه می کند که رنگ پس زمینه کمی متفاوت از بقیه اعلان دارد. این به شما امکان می دهد توجه را به یک بلوک متن معین جلب کنید:
@component('mail::panel')This is the panel content.@endcomponent
جزء جدول
جزء جدول به شما امکان می دهد یک جدول Markdown را به یک جدول HTML تبدیل کنید. کامپوننت جدول Markdown را به عنوان محتوای خود می پذیرد. تراز ستون جدول با استفاده از نحو پیش فرض تراز جدول Markdown پشتیبانی می شود:
@component('mail::table')| Laravel | Table | Example || ------------- |:-------------:| --------:|| Col 2 is | Centered | $10 || Col 3 is | Right-Aligned | $20 |@endcomponent
سفارشی سازی کامپوننت ها
شما می توانید تمام اجزای اعلان 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\User
، شامل یک
notifications
رابطه Eloquent است که اعلانها را برای موجودیت بازمیگرداند.
برای واکشی اعلانها، میتوانید به این روش مانند هر رابطه Eloquent دیگری
دسترسی داشته باشید.
به طور پیشفرض، اعلانها بر اساس مهر زمانی مرتب میشوند
created_at
:
$user = App\User::find(1); foreach ($user->notifications as $notification) { echo $notification->type;}
اگر میخواهید فقط اعلانهای «خوانده نشده» را بازیابی کنید، میتوانید از
unreadNotifications
رابطه استفاده کنید.
مجدداً، این اعلان ها بر اساس مهر زمانی مرتب می شوند
created_at
:
$user = App\User::find(1); foreach ($user->unreadNotifications as $notification) { echo $notification->type;}
برای دسترسی به اعلانهای خود از کلاینت جاوا اسکریپت، باید یک کنترلکننده اعلان برای برنامه خود تعریف کنید که اعلانها را برای یک موجودیت اعلانپذیر، مانند کاربر فعلی، برمیگرداند. سپس می توانید یک درخواست HTTP به URI آن کنترلر از کلاینت جاوا اسکریپت خود ارسال کنید.
علامت گذاری اعلان ها به عنوان خوانده شده
به طور معمول، زمانی که کاربر یک اعلان را مشاهده می کند، می خواهید آن را
به عنوان "خوانده شده" علامت گذاری کنید.
این
Illuminate\Notifications\Notifiable
ویژگی
markAsRead
روشی را ارائه می دهد که
read_at
ستون را در رکورد پایگاه داده اعلان به روز می کند:
$user = App\User::find(1); foreach ($user->unreadNotifications as $notification) { $notification->markAsRead();}
با این حال، به جای حلقه زدن در هر اعلان، می توانید از این
markAsRead
روش مستقیماً در مجموعه ای از اعلان ها استفاده کنید:
$user->unreadNotifications->markAsRead();
همچنین میتوانید از یک درخواست بهروزرسانی انبوه برای علامتگذاری همه اعلانها به عنوان خواندهشده بدون بازیابی آنها از پایگاه داده استفاده کنید:
$user = App\User::find(1); $user->unreadNotifications()->update(['read_at' => now()]);
میتوانید
delete
اعلانها را بهطور کامل از جدول حذف کنید:
$user->notifications()->delete();
اطلاعیه های پخش
پیش نیازها
قبل از پخش اعلانها، باید سرویسهای پخش رویداد لاراول را پیکربندی کرده و با آن آشنا باشید . پخش رویداد راهی را برای واکنش به رویدادهای لاراول در سمت سرور از کلاینت جاوا اسکریپت شما فراهم می کند.
قالب بندی اعلان های پخش
این کانال اعلانها را با استفاده از خدمات
پخش رویداد
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\User
بنابراین، اگر برای نمونه ای با شناسه
اعلان ارسال می کنید
1
، اعلان در
App.User.1
کانال خصوصی پخش می شود.
هنگام استفاده از
Laravel Echo
، میتوانید به راحتی به اعلانهای یک کانال با استفاده از
notification
روش کمکی گوش دهید:
Echo.private('App.User.' + userId) .notification((notification) => { console.log(notification.type); });
سفارشی کردن کانال اطلاع رسانی
اگر میخواهید شخصیسازی کنید که یک نهاد قابل اطلاع در کدام کانال
اعلانهای پخش خود را دریافت میکند، میتوانید روشی را
receivesBroadcastNotificationsOn
در نهاد قابل اطلاع تعریف کنید:
<?php namespace App; 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; }}
اعلان های پیامکی
پیش نیازها
ارسال اعلانهای پیامکی در لاراول توسط Nexmo
انجام میشود
.
قبل از اینکه بتوانید اعلانها را از طریق Nexmo ارسال کنید، باید
laravel/nexmo-notification-channel
بسته Composer را نصب کنید:
composer require laravel/nexmo-notification-channel
با این کار بسته نیز نصب می شود
nexmo/laravel
.
این بسته شامل
فایل پیکربندی خودش
است .
می توانید از متغیرهای محیط
NEXMO_KEY
و
NEXMO_SECRET
برای تنظیم کلید عمومی و مخفی Nexmo خود استفاده کنید.
در مرحله بعد، باید یک گزینه پیکربندی را به
config/services.php
فایل پیکربندی خود اضافه کنید.
برای شروع می توانید پیکربندی نمونه زیر را کپی کنید:
'nexmo' => [ 'sms_from' => '15556666666',],
گزینه
sms_from
شماره تلفنی است که پیامک های شما از آن ارسال می شود.
شما باید یک شماره تلفن برای برنامه خود در کنترل پنل Nexmo ایجاد کنید.
قالب بندی اعلان های پیامکی
اگر یک اعلان از ارسال به صورت پیامک پشتیبانی می کند، باید
toNexmo
روشی را در کلاس اعلان تعریف کنید.
این متد یک
$notifiable
موجودیت دریافت می کند و باید یک
Illuminate\Notifications\Messages\NexmoMessage
نمونه را برگرداند:
/** * Get the Nexmo / SMS representation of the notification. * * @param mixed $notifiable * @return NexmoMessage */public function toNexmo($notifiable){ return (new NexmoMessage) ->content('Your SMS message content');}
قالب بندی اعلان های کد کوتاه
لاراول همچنین از ارسال اعلانهای کد کوتاه، که قالبهای پیام از پیش
تعریفشده در حساب Nexmo شما هستند، پشتیبانی میکند.
میتوانید نوع اعلان (
alert
,
2fa
یا
marketing
) و همچنین مقادیر سفارشی که قالب را پر میکند را مشخص کنید:
/** * Get the Nexmo / Shortcode representation of the notification. * * @param mixed $notifiable * @return array */public function toShortcode($notifiable){ return [ 'type' => 'alert', 'custom' => [ 'code' => 'ABC123', ]; ];}
مانند مسیریابی اعلانهای پیامکی ، باید این
routeNotificationForShortcode
روش را بر روی مدل قابل اطلاع خود پیادهسازی کنید.
محتوای یونیکد
اگر پیام اس ام اس شما حاوی کاراکترهای یونیکد است، باید
unicode
در هنگام ساختن
NexmoMessage
نمونه، متد را فراخوانی کنید:
/** * Get the Nexmo / SMS representation of the notification. * * @param mixed $notifiable * @return NexmoMessage */public function toNexmo($notifiable){ return (new NexmoMessage) ->content('Your unicode message') ->unicode();}
سفارشی کردن شماره "از".
اگر میخواهید برخی از اعلانها را از شماره تلفنی که با شماره تلفن
مشخصشده در فایلتان متفاوت است ارسال کنید
config/services.php
، میتوانید از این
from
روش برای
NexmoMessage
نمونه استفاده کنید:
/** * Get the Nexmo / SMS representation of the notification. * * @param mixed $notifiable * @return NexmoMessage */public function toNexmo($notifiable){ return (new NexmoMessage) ->content('Your SMS message content') ->from('15554443333');}
مسیریابی اعلان های پیامکی
برای هدایت اعلانهای Nexmo به شماره تلفن مناسب، روشی را
routeNotificationForNexmo
در نهاد قابل اطلاع خود تعریف کنید:
<?php namespace App; 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; }}
Slack Notifications
پیش نیازها
قبل از اینکه بتوانید اعلان ها را از طریق Slack ارسال کنید، باید کانال اعلان را از طریق Composer نصب کنید:
composer require laravel/slack-notification-channel
همچنین باید یک ادغام "Incoming Webhook" را برای تیم Slack خود پیکربندی کنید. این ادغام URL را در اختیار شما قرار می دهد که می توانید هنگام مسیریابی اعلان های Slack از آن استفاده کنید .
قالب بندی Slack Notifications
اگر یک اعلان از ارسال به عنوان پیام Slack پشتیبانی می کند، باید
toSlack
روشی را در کلاس اعلان تعریف کنید.
این روش یک
$notifiable
موجودیت دریافت می کند و باید یک
Illuminate\Notifications\Messages\SlackMessage
نمونه را برگرداند.
پیامهای شل ممکن است حاوی محتوای متنی و همچنین یک «پیوست» باشد که متن
اضافی یا مجموعهای از فیلدها را قالببندی میکند.
بیایید به یک
toSlack
مثال اساسی نگاهی بیندازیم:
/** * Get the Slack representation of the notification. * * @param mixed $notifiable * @return SlackMessage */public function toSlack($notifiable){ return (new SlackMessage) ->content('One of your invoices has been paid!');}
در این مثال ما فقط یک خط متن را به Slack می فرستیم که پیامی شبیه شکل زیر ایجاد می کند:

سفارشی کردن فرستنده و گیرنده
شما می توانید از روش
from
و
to
برای سفارشی کردن فرستنده و گیرنده استفاده کنید.
متد
from
یک نام کاربری و شناسه ایموجی را می پذیرد، در حالی که
to
روش یک کانال یا نام کاربری را می پذیرد:
/** * Get the Slack representation of the notification. * * @param mixed $notifiable * @return SlackMessage */public function toSlack($notifiable){ return (new SlackMessage) ->from('Ghost', ':ghost:') ->to('#other') ->content('This will be sent to #other');}
همچنین می توانید به جای ایموجی از یک تصویر به عنوان لوگوی خود استفاده کنید:
/** * Get the Slack representation of the notification. * * @param mixed $notifiable * @return 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');}
پیوست های شل
همچنین میتوانید «پیوستها» را به پیامهای 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.'); });}
مثال بالا یک پیام Slack به شکل زیر ایجاد می کند:

ضمیمه ها همچنین به شما امکان می دهند آرایه ای از داده ها را مشخص کنید که باید به کاربر ارائه شود. داده های داده شده در قالب جدولی برای خواندن آسان ارائه می شود:
/** * 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:', ]); });}
مثال بالا یک پیام Slack به شکل زیر ایجاد می کند:

محتوای پیوست 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 به مکان مناسب،
routeNotificationForSlack
روشی را بر روی موجودیت قابل اطلاع خود تعریف کنید.
این باید نشانی وب هوک را که اعلان باید به آن تحویل داده شود، بازگرداند.
URL های Webhook ممکن است با افزودن یک سرویس "Incoming Webhook" به تیم
Slack شما ایجاد شوند:
<?php namespace App; 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/...'; }}
بومی سازی اعلان ها
لاراول به شما این امکان را می دهد که اعلان ها را در محلی غیر از زبان فعلی ارسال کنید و حتی اگر نوتیفیکیشن در صف قرار گیرد، این منطقه را به خاطر می آورد.
برای انجام این کار، کلاس
روشی برای تنظیم زبان مورد نظر
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\NotificationSent
رویداد توسط سیستم اطلاع رسانی فعال می شود.
این شامل نهاد "اعلان پذیر" و خود نمونه اعلان است.
شما می توانید شنوندگان را برای این رویداد در سایت خود ثبت کنید
EventServiceProvider
:
/** * The event listener mappings for the application. * * @var array */protected $listen = [ 'Illuminate\Notifications\Events\NotificationSent' => [ 'App\Listeners\LogNotification', ],];
پس از ثبت شنوندگان در خود
EventServiceProvider
، ازevent:generate
دستور Artisan برای تولید سریع کلاس های شنونده استفاده کنید.
در شنونده رویداد، میتوانید به
notifiable
,
notification
و
channel
ویژگیهای رویداد دسترسی داشته باشید تا درباره گیرنده اعلان یا خود اعلان
بیشتر بدانید:
/** * Handle the event. * * @param NotificationSent $event * @return void */public function handle(NotificationSent $event){ // $event->channel // $event->notifiable // $event->notification // $event->response}
کانال های سفارشی
لاراول با تعداد انگشت شماری کانال اعلان عرضه می شود، اما ممکن است بخواهید
درایورهای خود را برای ارسال اعلان ها از طریق کانال های دیگر بنویسید.
لاراول آن را ساده می کند.
برای شروع، کلاسی را تعریف کنید که حاوی
send
متد باشد.
متد باید دو آرگومان دریافت کند: a
$notifiable
و a
$notification
:
<?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... }}
هنگامی که کلاس کانال اطلاع رسانی شما تعریف شد، می توانید نام کلاس را از
via
روش هر یک از اعلان های خود برگردانید:
<?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) { // ... }}