事件注解
適用場景
模型事件類似于 ThinkPHP
框架模型的模型事件,可用于在數(shù)據(jù)寫入數(shù)據(jù)庫之前做一些預(yù)處理操作。
模型事件是指在進行模型的寫入操作的時候觸發(fā)的操作行為,包括調(diào)用模型對象的 insert
、delete
、update
方法以及對實體對象初始化時觸發(fā)。
模型類支持 OnInitialize
、OnInsert
、OnDelete
、OnUpdate
事件。
事件行為注解 | 描述 |
---|---|
OnInitialize | 實體被實例化時觸發(fā) |
OnInsert | 新增前 |
OnDelete | 刪除前 |
OnUpdate | 更新前 |
使用示例
聲明事件注解
在模型類中可以通過注解及定義類方法來實現(xiàn)事件注解的聲明,如下所示:
<?php
declare(strict_types=1);
namespace EasySwoole\FastDb\Tests\Model;
use EasySwoole\FastDb\AbstractInterface\AbstractEntity;
use EasySwoole\FastDb\Attributes\Hook\OnInitialize;
use EasySwoole\FastDb\Attributes\Hook\OnInsert;
use EasySwoole\FastDb\Attributes\Hook\OnDelete;
use EasySwoole\FastDb\Attributes\Hook\OnUpdate;
// ...
/**
* @property int $id
* @property string $name
* @property int $status
* @property int $score
* @property int $create_time
*/
#[OnInitialize('onInitialize')]
#[OnInsert('onInsert')]
#[OnDelete('onDelete')]
#[OnUpdate('onUpdate')]
class User extends AbstractEntity
{
// ...
public function onInitialize()
{
// todo::
}
public function onInsert()
{
if (empty($this->status)) {
return false;
}
if (empty($this->create_time)) {
$this->create_time = time();
}
}
public function onDelete()
{
// todo::
}
public function onUpdate()
{
// todo::
}
}
上面定義了 OnInitialize
、OnInsert
、OnDelete
、OnUpdate
事件注解,并在注解中通過形如 #[OnInitialize('onInitialize')]
的方式給 OnInitialize
注解傳入?yún)?shù),給對應(yīng)的事件行為設(shè)置事件被觸發(fā)時執(zhí)行的回調(diào) onInitialize
、onInsert
、onDelete
、onUpdate
。
設(shè)置的回調(diào)方法會自動傳入一個參數(shù)(當(dāng)前的模型對象實例),并且 OnInsert
、OnDelete
、OnUpdate
事件的回調(diào)方法(onInsert
、onDelete
、onUpdate
) 如果返回 false
,則不會繼續(xù)執(zhí)行。
使用
$user = new User(['name' => 'EasySwoole', 'id' => 1000]);
$result = $user->insert();
var_dump($result); // false,返回 false,表示 insert 失敗。