当前位置: 首页 > 文档资料 > FuelPHP 中文文档 >

建立 - 觀察者 - Orm 套件

优质
小牛编辑
131浏览
2023-12-01

Orm 是 物件关联对映(Object Relational Mapper) 的简写,它做两件事:
对应你资料库里的资料列到物件, 并能让你在这些物件之间建立关係。
它紧随 活动记录模式( Active Record Pattern),但也受到其他系统的影响。

观察者:建立你自己的

你可以添加任何类别做为一个观察者,藉由添加完整的类别名称(包含命名空间)到你的模型的 Observers 特性。 有两种方式建立的类别可以用来做为观察者:

扩充 Orm\Observer 类别

建立一个扩充 Orm\Observer 的新类别,并为你想要你的观察者行动的事件上建立方法。 在下面的範例中,你想要它在 after_insert上行动, 该方法动作时将被传递 Model 实例。

class Observer_Something extends Orm\Observer
{

	public function after_insert(Orm\Model $model)
	{
		\Log::info('Succesfully created new object of class '.get_class($model));
	}
}

Orm\Observer 扩充的类型预设是独体的,如此你不能使用一个 instance() 方法或一个 $_instance 特性,否则无法正常运作, 因为此方法可能是静态或非静态。

带有一个 orm_notify() 方法

当你扩充 Orm\Observer 类别它继承一个 orm_notify() 方法, 该方法将确认是否有符合事件的方法,并在可能时呼叫它。 但你可以使用任何类别做为一个观察者只要它有一个 orm_notify() 方法, 该方法将于事件被呼叫且被传递事件名称和一个 Model 实例。

class Some_Other_Class
{

	// 在 orm_notify 方法之前或之后可能有许多方法及特性

	public static function orm_notify(Orm\Model $model, $event)
	{
		\Log::info('I was notified of the event '.$event.' on a Model of class '.get_class($model));
	}
}

事件名称

  • after_create,一旦物件被建立时,由 __construct() 方法呼叫
  • after_load,一旦物件从资料库被载入时,由 __construct() 方法呼叫
  • before_save,在任何事完成之前,由 save() 方法呼叫
  • after_save,在完成后由 save() 方法呼叫
  • before_insert,当一个物件第一次被储存到资料库时被呼叫
  • after_insert,当一个物件第一次被储存到资料库后被呼叫
  • before_update,当一个物件被储存到资料库时被呼叫(第一次除外)
  • after_update,当一个物件被储存到资料库后被呼叫(第一次除外)
  • before_delete,当你从资料库删除一个物件时被呼叫
  • after_delete,当你从资料库删除一个物件后被呼叫
  • after_clone,在一个物件成功被複製之后被呼叫

before_insertbefore_update 在该物件被变更时触发。如果你需要触发一个事件即使该物件没有被变更(例如:要处理 $_FILES 资料),你应该使用 before_save