آموزش لاراول - کار با Notifications
پیش از در مورد نحوه ارسال ایمیل در دوره مقدماتی نکاتی مطرح شد. در این مقاله در مورد ابزار دیگری در لاراول صحبت خواهیم کرد که قابلیت ارسال نوتیفیکیشن از طریق کانالهایی دیگری رو در اختیار ما قرار میده. شما همچنین میتوانید کانال اختصاصی با استفاده از این ابزار پیادهسازی کنید.
خب بیایید شروع کنیم و مطابق روال گذشته یک پروژه خام رو پیادهسازی میکنیم.
اگر وارد مدل User که به طور پیش فرض در لاراول وجود داره بشه یک خاصیت به نام Notifiable وجود داره که اگر اون رو هم نگاه کنید دوتا خاصیت دیگه در اونجا هست :


خاصیت HasDatabaseNotifications
برای کار با نوتیفیکیشنهایی هست که درون سیستمی هستند و در جدول ذخیره میشن! مانند همین نوتیفیکشنهای پرسپت که جلوتر در مورد ابزارهایی که در اختیار ما قرار میده صحبت خواهیم کرد و دیگری RoutesNotifications
که قابلیت ارسال نوتیفیکشن بر ر.ی مدل کاربر رو برای ما فراهم میکنه:
$user->notify(new SampleNotification());
به همین راحتی شما میتونید بر اساس کانالی که تعریف کردید برای کاربر پیغامی رو ارسال کنید:
اجازه بدید یک مدل Notification ایجاد کنیم و آنرا بررسی کنیم:
php artisan make:notification InvoicePaid
پس از اجرای دستور فوق یک کلاس جدید در دایرکتوری app/Notifications
ایجاد خواهد شد:


همانطور که مشاهده میکنید در این کلاس یک سازنده وجود داره که شما میتونید مقادیرتون رو از طریق اون وارد کنید. در اینجا یک متد مهم بنام via
برای تعریف کانال ارسال وجود داره که براساس اون توابع بعدی باید تعریف بشن! به این صورت که اگر مانند تصویر فوق خروجی این تابع شامل mail بود تابع toMail فراخوانی میشه و پیغام تعریف شده در اینجا به کاربر ارسال میشه. اگر خروجی شامل database هم میبود باید تابع toArray مواردی که میخواهیم به کاربر از طریق درون سیستمی دیتابیس ارسال بشه تعریف کنیم. برای کانالهای دیگه هم باید تابع مربوطه رو تعریف کنید میتوانید لیست کامل این کانالها را در زیر مشاهده کنید:
پیش از شروع باید mailtrap رو تنظیم کرده باشید که در مق اله زیر در این مورد و نحوه تنظیم ایمیل هم نکاتی رو گفتم که میتونید درآنجا مطالعه کنید:
خب بیایید اولین نوتیفیکیشن رو از طریق ارسال ایمیل انجام بدیم، برای اینکار همانطور که در بالا هم گفته شد کافیه دستور زیر رو اجرا کنید:
$user = \App\Models\User::first();
$user->notify(new \App\Notifications\InvoicePaid());


شما همچنین میتوانید با کمک دستور زیر ایمیل رو مناسب با نیاز ویرایش کنید:
php artisan vendor:publish --tag=laravel-notifications
برای ارسال ایمیل دستورات دیگری هم هست که میتوانید در اینجا آنها رو مشاهده کنید.
اما برای ارسال نوتیفیکیشن از طریق دیتابیس ابتدا باید دستور زیر را اجرا کنید تا فایل مربوط به جدول ایجاد بشه!
php artisan notification:table
پس از دستور فوق لازم هست که یکبار migrate رو انجام بدیم تا جدول مورد نظر هم ایجاد بشه. حالا به متد ToArray برمیگردیم و مقادیری که نیاز داریم رو تعریف میکنیم. من در اینجا برای تست یک آرایه بصورت زیر تعریف کردم که البته شما میتونید هر دیتایی که لازم دارید رو از طریق سازنده به کلاس وارد کنید:


در اینجا توجه کنید که notifiable در اینجا همون کاربر هست و شما از طریق این متغیر میتونید به مدل کاربر دسترسی داشته باشید. برای اینکه ارسال از طریق دیتابیس انجام بشه همانطور که گفتیم کافیه به تابع via
برگردید مقدار database رو هم به آرایه اضافه کنید. مشاهده خواهید کرد که اینبار با ارسال نوتیفیکیشن در جدول notifications یک رکورد جدید ایجاد خواهد شد.


اگر به رکورد دقت مقادیری که وارد کردیم در ستون data بصورت json ذخیره شدند ضمنا کاربر هم بصورت polimorph در ستون notifiable ذخیره شده. در اینجا میتوان ستون read_at رو هم مشاهده کرد که در واقع از آن میتوان برای ویژگی اعلانهای جدید که در سایتهای دیگه هم مشاهده کردید، استفاده میشه. برای گرفتن اعلانهای یک کاربر هم توابعی وجود داره (که در خاصیت HasDatabaseNotifications
قابل مشاهدست) برای مثال اگر بخواهیم تمام نوتیفیکیشنهای یک کاربر رو بگیریم از دستور زیر استفاده میکنیم:
$user->notifications
برای گرفتن تمام نوتیفیکیشنهای خوانده شده یک کاربر از دستور زیر استفاده میکنیم:
$user->readNotifications
و برای گرفتن نوتیفیکیشنهای خوانده شده دستور زیر رو داریم:
$user->unreadNotifications
در نهایت هم برای اینکه یک notification رو بعنوان یک نوتیفیکیشن خوانده شده ذخیره کنیم از متد markAsRead
استفاده کنید:
$user->notifications->first()->markAsRead()
کد مربوط به این آموزش هم در گیتهاب زیر موجود هست: