سیستم اعلان (Notification System) در لاراول – راهنمای کاربردی


در این مقاله قصد داریم به بررسی سیستم اعلان در فریمورک وب لاراول بپردازیم. سیستم اعلان در لاراول امکان ارسال اعلانها به کاربران را روی کانالهای مختلف فراهم ساخته است. در این مطلب به بررسی روش امکان ارسال اعلان از طریق کانال ایمیل میپردازیم.
مبانی اعلانها
در زمان توسعه اپلیکیشن در اغلب موارد لازم است که در مورد تغییر وضعیتهای مختلف به کاربران اطلاعرسانی کنید. ارسال اعلان ایمیلی در مواردی که چیزی تغییر یافته است، روش خوبی محسوب میشود. همچنین ارسال پیامک در مورد فعالیت لاگین کردن به منظور رعایت موارد امنیتی گزینه مناسبی است. ما به طور خاص در مورد پیامهایی صحبت میکنیم که کوتاه هستند و در مورد تغییرات صورت گرفته در حساب کاربری اطلاعرسانی میکنند.
لاراول یک ویژگی داخلی دارد که به ما کمک میکند فرایند شبیه به اعلانها را داشته باشیم. در واقع، با استفاده از این سازوکار درونی میتوانیم پیامهای اعلان را به روشی جالب و سرگرمکننده به کاربران ارسال کنیم.
زیبایی این رویکرد این است که امکان انتخاب از میان کانالهای مختلف ارسال اعلان را در اختیار ما قرار میدهد. در ادامه مرور سریعی در مورد کانالهای مختلف اعلان در لاراول خواهیم داشت.
- ایمیل: اعلانها به شکل ایمیل به کاربران ارسال میشوند.
- پیامک: همان طور که از نام آن مشخص است کاربران اعلانها را در قالب پیامکهایی روی گوشی خود دریافت میکنند.
- Slack: در این حالت، اعلانها روی کانالهای اسلک ارسال میشوند.
- پایگاه داده: این گزینه امکان ذخیرهسازی اعلانها در پایگاه داده را فراهم میسازد و به این ترتیب میتوانید یک رابط کاربری سفارشی برای نمایش آنها ایجاد کنید.
از میان کانالهای مختلفی که برای ارسال اعلان وجود دارند، ما قصد داریم در مثالی که در این نوشته ارائه میکنیم از ایمیل استفاده کنیم.
در واقع مثالی که در این مطلب ارائه خواهد شد یک کاربرد عملی کاملاً ساده است که به کاربران اپلیکیشن ما اجازه میدهد که پیامهایی را به هر کاربر ارسال کنند. زمانی که کاربران یک پیام جدید را در اینباکس خود دریافت کنند، با ارسال ایمیلی به آنها، رویدادی که رخ داده است را به اطلاع آنها خواهیم رساند. این کار را با استفاده از ویژگی اعلان در لاراول انجام میدهیم.
ایجاد یک کلاس اعلان سفارشی
همان طور که قبلاً صحبت کردیم، قصد داریم یک اپلیکیشن راهاندازی کنیم که به کاربران امکان ارسال پیام به همدیگر را میدهد. از سوی دیگر هنگامی که کاربران پیام جدیدی را از طریق کاربران دیگر و به وسیله ایمیل دریافت کنند این مسئله به آنها اعلام میشود.
در این بخش، فایلهای ضروری که برای پیادهسازی کاربرد عملی مورد نظر ما لازم هستند را معرفی میکنیم. در آغاز کار یک مدل Message ایجاد میکنیم که پیامهای ارسالی از سوی کاربران به همدیگر را نگهداری میکند.
همچنین باید چند فیلد دیگر مانند to ،from و message را به جدول messages اضافه کنیم. بدین ترتیب فایل migration را پیش از اجرای دستور migrate تغییر میدهیم.
اینک دستور migrate را که جدول پیامها را در پایگاه داده ایجاد میکند اجرا میکنیم.
دستور فوق یک جدول به نام messages در پایگاه داده ایجاد میکند.
ضمناً باید مطمئن شوید که سیستم احراز هویت پیش فرض لاراول را در ابتدا فعال کردهاید و بدین ترتیب ویژگیهایی مانند ثبت نام و ورود از قبل کار میکنند. اگر در مورد شیوه انجام این کار مطمئن نیستید میتوانید به این بخش از مستندات لاراول (+) مراجع کنید تا دید سریعی در این خصوص پیدا کنید.
از آنجا که هر اعلان در لاراول از سوی کلاس مجزایی نمایش مییابد، باید یک کلاس اعلان سفارشی ایجاد کنیم که جهت اطلاعرسانی به کاربران مورد استفاده قرار میگیرد. در ادامه از دستور artisan زیر برای ایجاد یک کلاس اعلان سفارشی به نام NewMessage استفاده میکنیم.
این دستور کلاس زیر را ایجاد میکند:
app/Notifications/NewMessage.php
بدین ترتیب محتوای آن فایل را با محتوای زیر عوض میکنیم:
از آنجا که قصد داریم از کانال ایمیل برای ارسال اعلانها به کاربران دیگر استفاده کنیم، متد via نیز بر همین اساس پیکربندی شده است. از این رو این متد به ما امکان میدهد که نوع کانال یک اعلان را پیکربندی کنیم.
سپس متد toMail را داریم که امکان پیکربندی پارامترهای مختلف ایمیل را در اختیار ما قرار میدهد. در واقع، متد toMail باید وهلهای از کلاس زیر را ارائه کند:
\Illuminate\Notifications\Messages\MailMessage
این کلاس متدهای مفیدی ارائه میکند که امکان پیکربندی پارامترهای ایمیل را فراهم ساخته است.
در میان متدهای مختلف، متد line امکان افزودن یک خط منفرد را در یک پیام ارائه میکند. از سوی دیگر متد action امکان افزودن یک دکمه Call-to-Action را در پیام در اختیار ما قرار میدهد.
به این ترتیب میتوانید یک پیام را که به کاربران ارسال خواهد شد قالببندی کنید. بنابراین شیوه پیکربندی کلاس اعلان در هنگام استفاده از کانال ایمیل برای ارسال اعلانها این گونه است.
در نهایت باید مطمئن شوید که متدهای مورد نیاز را بر اساس نوع کانال پیکربندی شده از طریق متد via پیادهسازی کردهاید. برای نمونه اگر از کانال پایگاه داده استفاده میکند و اعلانها را در یک پایگاه داده ذخیره خواهید کرد، نیازی به پیکربندی متد toMail ندارید و در عوض باید متد toArray را پیادهسازی کنید که به قالببندی دادههایی که باید در پایگاه داده ذخیره شوند میپردازد.
شیوه ارسال اعلان
در بخش قبلی یک کلاس اعلان ایجاد کردیم که امکان ارسال اعلان را در اختیار ما قرار میدهد. در این بخش فایلهایی که شیوه عملی ارسال اعلان با استفاده از کلاس اعلان newMessege را در اختیار ما قرار میدهند مورد بررسی قرار میدهیم.
ابتدا یک فایل در مسیر زیر ایجاد میکنیم:
app/Http/Controllers/NotificationController.php
محتوای این فایل به صورت زیر است:
البته باید یک مسیر مرتبط در فایل routes/web.php اضافه کنید:
دو روش وجود دارد که به لاراول امکان میدهد تا اعلانها را ارسال کند: یکی از آنها از طریق نهاد notifiable و دیگری از طریق Notification facade است.
اگر کلاس مدل نهاد از خصیصه Illuminate\Notifications\Notifiable استفاده کرده باشد میتوانید متد notify را روی مدل فراخوانی کنید. کلاس App\User خصیصه Notifiable را پیادهسازی میکند و از این رو به نهاد Notifiable تبدیل میشود. از سوی دیگر میتوانید از Facade موجود در مسیر Illuminate\Support\Facades\Notification نیز برای ارسال اعلان به کاربران استفاده کنید.
در ادامه متد index کنترلر را مورد بررسی قرار میدهیم.
در مورد مثالی که ما بررسی میکنیم، قصد داریم زمانی که کاربران پیام جدیدی دریافت میکنند به آنها اطلاعرسانی کنیم. بنابراین باید رفتار متد inbox را در وهله نخست تقلید کنیم.
سپس با استفاده از متد notify روی شیء $toUser به کاربر گیرنده در مورد پیام جدید اطلاعرسانی میکنیم چون یک نهاد notifiable است.
ممکن است متوجه شده باشید که یک شیء fromUser$ را نیز به عنوان آرگومان نخست متد __construct ارسال میکنیم، چون میخواهیم نام کاربری from را نیز در پیام بگنجانیم.
از سوی دیگر اگر بخواهیم آن را با استفاده از Notification شبیهسازی کنیم، این کار با استفاده از قطعه کد زیر بسیار آسان خواهد بود.
همان طور که مشاهده میکنید، ما از متد send برای ارسال facade به نام Notification به کاربر استفاده کردهایم.
در ادامه URL به صورت http://your-laravel-site-domain/notify/index را در مرورگر خود باز کنید. اگر هنوز وارد سایت نشده باشید، به صفحه لاگین ریدایرکت میشوید. زمانی که وارد شدید یک اعلان ایمیل در آدرس ایمیل متصل به کاربر 1 دریافت خواهید کرد.
ممکن است کنجکاو باشید که سیستم اعلان چگونه آدرس to را تشخیص داده است در حالی که شما هنوز آن را پیکربندی نکردهاید. در این حالت سیستم اعلان سعی میکند مشخصه email را در شیء notifiable پیدا کند. کلاس شیء App/User نیز از قبل این مشخصه را دارد، چون از سیستم اعلان پیش فرض لاراول استفاده میکنیم.
با این وجود، اگر میخواهید این رفتار را تغییر دهید و از مشخصه متفاوتی به جز email استفاده کنید کافی است متد زیر را در کلاس notification خود تعریف کنید:
اکنون سیستم اعلان به جای مشخصه email برای واکشی آدرس to به دنبال مشخصه email_address میگردد. بدین ترتیب با شیوه استفاده از سیستم اعلان در لاراول آشنا شدیم.
سخن پایانی
مطلبی که با عنوان اعلانها در لاراول ملاحظه کردید، به بررسی یکی از ویژگیهای بسیار مفید، اما در عین حال مغفول لاراول پرداخته است. پس از یک مقدمه کوتاه یک مثال عملی را پیادهسازی کردیم که شیوه ارسال اعلان از طریق کانال ایمیل را توضیح میدهد. در واقع این وضعیت در حالتی که پیامهای کوتاهی در مورد تغییرات در اپلیکیشن ارسال میکنیم کاملاً کارآمد است.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی PHP
- آموزش REST API در Laravel (لاراول) با بسته Passport
- طراحی و توسعه پروژههای وب
- زمانبندی وظایف در لاراول (Laravel) — راهنمای مقدماتی
- 12 فریمورک وب که توسعه دهندگان باید در سال 2۰1۸ بیاموزند
==