事件注解
適用場景
模型事件類似于 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 失敗。