در مطلب مربوط به زند فریم ورک ۲ – Event Manager در رابطه با Event Manager بحث کردیم. اما در این مطلب یک مثال کاربردی از این الگو را نمایش خواهیم داد. در یکی از پروژه هایی که کار کردم نیاز بود که تمام ورود های کاربران بر اساس زمان ورود آنها در سیستم ثبت شده و در نهایت گزارشی از این اطلاعات تهیه شود. در این مورد از  Event Manager استفاده کردم تا رویدادی را با نام auth.login ایجاد نمایم و با استفاده از listener کار ثبت اطلاعات را در پایگاه داده انجام دهم.

ابتدا ماژولی با نام ActivityLog ایجاد کرده و سپس کلاسی با نام LogEventManager برای مدیریت رویداد مورد نظر ایجاد میکنیم که از EventManagerAwareInterface استفاده میکند.

سپس یک Listener با نام LogEventListener ایجاد کرده تا هنگامی که رویداد مورد نظر رخ داد یکی از متد هایی که تنظیم کرده ایم اجرا شود.

با این روش listener مربوطه با استفاده از SharedManager به سرویس مربوط به LogEventManager دسترسی خواهد داشت. اولین پارامتر متد attach کد مشخصه ی EventManager است که قبلا ایجاد کرده ایم. علامت * مشخص میکند که بر روی تمام مشخصه ها اجرا شود.

حال در فایل مربوط به تنظیمات ماژول کد های زیر را قرار می دهیم:

با این روش امکان اینکه listener مربوطه بتواند به رویداد های دیگر نیز پاسخ دهد وجود دارد. در روشی که در مستندات زند فریم ورک بیان شده است شما از یک closure یا تابع بی نام به عنوان listener استفاده خواهید کرد. اما از نظر من با این روش کد مرتب تری خواهید داشت. حال در هر بخشی از هر ماژول که بخواهیم میتوانیم رویداد مورد نظر را فراخوانی و پارامتر های مورد نظر را در اختیار آن قرار دهیم.

در هر بخشی از هر ماژول که به SerciveManager دسترسی داشته باشیم میتوانیم با فراخوانی دستور بالا رویداد مربوطه را فراخوانی کرده و کنترل برنامه به Listener آن رویداد منتقل شود.

 

محمد باقر رستمی

برنامه نویسی رو دوست دارم و از کارم و بیشتر از اون از یادگرفتن لذت می برم. دوست دارم از این طریق برای مردم دنیا مفید باشم. فارغ از رنگ، نژاد، ملیت و جنسیت.

Latest posts by محمد باقر رستمی (see all)

facebooktwittergoogle_pluslinkedin

دیدگاه

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

*

*


9 − دو =