FuelPHP - 事件



一个事件是由程序识别的一个动作或事件,程序本身可以处理该事件。例如,我们可以定义一个名为my_fuel_event的动作或事件,然后在每次调用my_fuel_event事件时执行一些操作。FuelPHP 提供了Event类来处理应用程序中的事件。

系统事件

FuelPHP 定义了一些事件,我们可以通过这些事件在应用程序调用或触发定义的事件时执行一些操作。这有助于更改 FuelPHP 的行为,而无需更改 FuelPHP 的核心代码文件。预定义的事件如下:

  • app_created - 在 FuelPHP 框架初始化后将触发此事件。

  • request_created - 创建新的 Request 对象后将触发此事件。

  • request_started - 请求执行时将触发此事件。

  • controller_started - 在调用控制器 before() 方法之前将触发此事件。

  • controller_finished - 在调用控制器 after() 方法并收到响应后将触发此事件。

  • response_created - 创建新的 Response 对象后将触发此事件。

  • request_finished - 请求执行完成并收到响应后将触发此事件。

  • shutdown - 主请求处理完毕并发送输出后将触发此事件。

我们可以在特殊的配置文件fuel/app/config/events.php中处理事件,如下所示:

<?php  
   return array ( 
      'fuelphp' => array ( 
         'app_created' => function() { 
            // After FuelPHP initialised
         }, 
         'request_created' => function() { 
            // After Request forged 
         }, 
         'request_started' => function() { 
            // Request is requested 
         }, 
         'controller_started' => function() { 
            // Before controllers before() method called 
         }, 
         'controller_finished' => function() { 
            // After controllers after() method called 
         }, 
         'response_created' => function() { 
            // After Response forged 
         }, 
         'request_finished' => function() { 
            // Request is complete and Response received 
         }, 
         'shutdown' => function() { 
            // Output has been send out 
         }, 
      ), 
   );

事件方法

Event 类提供注册、注销和触发事件的方法。它们如下所示:

register()

register 方法允许文件注册一个对象,当调用 trigger 方法时将运行该对象。

$my_event_code = function() { 
   echo 'my event'; 
} 
Event::register('my_event', $my_event_code); 

unregister()

unregister 方法允许文件注销一个对象,该对象在调用 trigger 方法时将运行。

Event::unregister('my_event', $my_event_code);

trigger()

trigger 方法用于触发或激活通过 register 方法关联的回调函数。

Event::trigger('my_event');

has_events()

has_events 方法用于检查特定注册事件是否具有触发器。

Event::has_events('my_event');

forge()

forge 返回一个新的事件对象。

$event = Event::forge();

instance()

instance 返回一个新的事件对象单例。

$event = Event::instance('event_instance');
广告