Eventها یا رویدادها در فریمورک Yii
شما می توانید از"eventها" یا "رویدادها" برای تزریق کد سفارشی به نقطه اجراییِ خاص، استفاده کنید. شما می توانید کد سفارشی را به یک event اضافه کنید و هنگامی که این event اجرا می گردد، کد نیز اجرا شود. به عنوان مثال، زمانی که یک کاربر جدید در وب سایت شما ثبت نام می کند، یک شیء logger می تواند رویدادی به نام UserRegistered را، اجرا کند. اگر کلاسی نیاز به event ی داشته باشد، باید آن را از کلاس yii\base\Component گسترش دهید(extend کنید).
یک event handler یک PHP callback است. شما می توانید از callback های زیر استفاده کنید :
- یک تابع global پی اچ پی به عنوان یک string
- یک تابع ناشناس (anonymous function)
- یک آرایه از نام کلاس و یک متد به عنوان یک string، به عنوان مثال: ['ClassName', 'methodName']
- یک آرایه از یک شی و یک متد به عنوان یک string، به عنوان مثال: [$obj, 'methodName']
مرحله 1 - برای اضافه کردن یک handler به یک event شما بایستی متد yii\base\Component::on() را فراخوانی نمایید.
$obj = new Obj;
// this handler is a global function
$obj->on(Obj::EVENT_HELLO, 'function_name');
// this handler is an object method
$obj->on(Obj::EVENT_HELLO, [$object, 'methodName']);
// this handler is a static class method
$obj->on(Obj::EVENT_HELLO, ['app\components\MyComponent', 'methodName']);
// this handler is an anonymous function
$obj->on(Obj::EVENT_HELLO, function ($event) {
// event handling logic
});
شما می توانید یک یا چند handler را به یک event اضافه کنید. handlerهای اضافه شده به Event به همان ترتیبی که به event متصل شده اند، اجرا می شوند.
مرحله 2 - برای جلوگیری از فراخوانی handler ها ، باید پروپرتی yii\base\Event::$handled را با مقدار true ست کنید.
$obj->on(Obj::EVENT_HELLO, function ($event) {
$event->handled = true;
});
مرحله 3 - برای وارد کردن یک handler به ابتدای یک صف، باید متد yii\base\Component::on() را فراخوانی کنید، و برای پارامتر چهارمِ آن، مقدار false را بفرستید.
$obj->on(Obj::EVENT_HELLO, function ($event) {
// ...
}, $data, false);
مرحله 4 - برای اجرای یک event، باید متد yii\base\Component::trigger() را فراخوانی کنید.
namespace app\components;
use yii\base\Component;
use yii\base\Event;
class Obj extends Component {
const EVENT_HELLO = 'hello';
public function triggerEvent() {
$this->trigger(self::EVENT_HELLO);
}
}
مرحله 5 - برای جدا کردن یک handler از یک event، باید متدyii\base\Component::off() فراخوانی کنید.
$obj = new Obj;
// this handler is a global function
$obj->off(Obj::EVENT_HELLO, 'function_name');
// this handler is an object method
$obj->off(Obj::EVENT_HELLO, [$object, 'methodName']);
// this handler is a static class method
$obj->off(Obj::EVENT_HELLO, ['app\components\MyComponent', 'methodName']);
// this handler is an anonymous function
$obj->off(Obj::EVENT_HELLO, function ($event) {
// event handling logic
});
این فصل در یک نگاه:
…
سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…این فصل در یک نگاه:
…
پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…