事件注解
適用場景
模型事件類似于 ThinkPHP
框架模型的模型事件,可用于在數據寫入數據庫之前做一些預處理操作。
模型事件是指在進行模型的寫入操作的時候觸發的操作行為,包括調用模型對象的 insert
、delete
、update
方法以及對實體對象初始化時觸發。
模型類支持 OnInitialize
、OnInsert
、OnDelete
、OnUpdate
事件。
事件行為注解 | 描述 |
---|---|
OnInitialize | 實體被實例化時觸發 |
OnInsert | 新增前 |
OnDelete | 刪除前 |
OnUpdate | 更新前 |
使用示例
聲明事件注解
在模型類中可以通過注解及定義類方法來實現事件注解的聲明,如下所示:
<?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
注解傳入參數,給對應的事件行為設置事件被觸發時執行的回調 onInitialize
、onInsert
、onDelete
、onUpdate
。
設置的回調方法會自動傳入一個參數(當前的模型對象實例),并且 OnInsert
、OnDelete
、OnUpdate
事件的回調方法(onInsert
、onDelete
、onUpdate
) 如果返回 false
,則不會繼續執行。
使用
$user = new User(['name' => 'EasySwoole', 'id' => 1000]);
$result = $user->insert();
var_dump($result); // false,返回 false,表示 insert 失敗。