Udemy24 Logo Liight

آموزش ارسال نوتیفیکیشن‌ها در لاراول

لاراول علاوه بر پشتیبانی از امکان ارسال ایمیل، از امکان ارسال نوتیفیکیشن‌‌ها (اعلان‌ها) بر روی کانال‌های مختلفی مانند mail ،SMS (از طریق Nexmo) و Slack پشتیبانی می‌کند. نوتیفیکیشن‌ها را می‌توان در یک پایگاه داده ذخیره کرد تا بتوان در رابط وب آن‌ها را نمایش داد.

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

ایجاد نوتیفیکیشن‌‌ها در لاراول

در لاراول، هر نوتیفیکیشن‌ با یک کلاس واحد (که معمولا در دایرکتوری app/Notifications ذخیره می‌شود) نمایش داده می‌شود. اگر این دایرکتوری در برنامه شما وجود ندارد، نگران نباشید زیرا در زمان اجرای دستور آرتیسان make:notification این دایرکتوری برای شما ایجاد می‌شود:

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

ارسال نوتیفیکیشن‌ ها در لاراول

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

نوتیفیکیشن‌ها را می‌توان به دو روش ارسال کرد، با استفاده از متد notify از ویژگی Notifiable یا با استفاده ازfacadeNotification. ابتدا، اجازه دهید از ویژگی Notifiable استفاده کنیم:

این ویژگی توسط مدل پیش‌فرض App\User استفاده می‌شود و شامل یک متد notify است که برای ارسال نوتیفیکیشن‌ها به کار می‌رود. متد notify یک نمونه نوتیفیکیشن‌ را دریافت می‌کند:

توجه کنید که شما می‌توانید از ویژگی Illuminate\Notifications\Notifiable بر روی هر یک از مدل‌های خود در لاراول استفاده کنید و فقط محدود به استفاده از آن در مدل User برنامه خود نیستید.

با استفاده از Notification Facade

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

مشخص کردن کانال های تحویل نوتیفیکیشن

هر کلاس notification ‌دارای یک متد via است که مشخص می‌کند که نوتیفیکیشن‌ به کدام کانال‌‌ها تحویل داده خواهد شد. معمولا، نوتیفیکیشن‌ها می‌توانند بر روی کانال‌های mail ، database ، broadcas t، nexmo و slack ارسال شوند.

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

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

نوتیفیکیشن‌‌های صف شده در لاراول

قبل از صف بندی نوتیفیکیشن‌ها در یک صف، شما ابتدا باید صف خود را پیکربندی کرده و یک worker را استارت کنید.

 

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

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

اگر می‌خواهید تحویل نوتیفیکیشن‌ را به تاخیر بیاندازید، می‌توانید متد delay را به نوتیفیکیشن‌ خود انتقال دهید:

نوتیفیکیشن‌های  On-Demand در لاراول

گاهی اوقات، شما ممکن است نیاز به ارسال یک نوتیفیکیشن‌ به کسی دارید که به عنوان یک کاربر (user) در برنامه شما ذخیره نشده است. با استفاده از متد Notification::route ، قبل از ارسال نوتیفیکیشن‌، می‌توانید اطلاعات مسیریابی نوتیفیکیشن ad-hoc را مشخص کنید:

نوتیفیکیشن ‌های Mail در لاراول

فرمت کردن پیام های ایمیل

اگر بخواهید یک نوتیفیکیشن‌ را به عنوان یک ایمیل ارسال کنید، باید یک متد toMail را در کلاس نوتیفیکیشن‌ تعریف کنید. این متد یک $notifiable را دریافت می‌کند و باید یک نمونه از Illuminate\Notifications\Messages\MailMessage را بازگرداند. پیا‌م‌های ایمیل ممکن است حاوی خطوط متنی و همچنین فراخوانی یک اکشن باشند. اجازه دهید، نگاهی به یک مثال از متد toMail داشته باشیم:

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

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

 

در زمان ارسال نوتیفیکیشن‌های ایمیل، مطمئن شوید که مقدار name در فایل پیکربندی config/app.php شما تنظیم شده باشد. این مقدار در قسمت هدر و پاورقی پیام‌های نوتیفیکیشن ایمیل شما استفاده می‌شود.

سایر گزینه های قالب بندی نوتیفیکیشن

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