You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grav Admin中Flex对象保存时是否存在对应Admin事件钩子?

Grav Flex对象写入前的自定义修改钩子说明

Flex对象存在和onAdminSave作用类似的事件钩子,完全支持在数据写入文件系统等持久化存储前做自定义修改,常用的钩子有三类:

  • 通用保存前钩子onFlexObjectSave
    这是Flex体系全局生效的保存前事件,触发时机在数据校验完成、正式写入存储之前,所有Flex对象(不管是系统自带还是自定义的)触发保存操作时都会走到这个钩子。回调中可以通过$event['object']拿到当前操作的对象实例,直接修改对象属性即可,修改后的值会自动带入后续写入流程。使用时建议先判断对象的Flex类型,避免误修改其他业务的Flex数据。
  • 特定类型专属保存钩子onFlexObjectSave[类型标识]
    如果只需要处理某一类固定的Flex对象,可以用更精准的类型专属事件,不需要额外做类型判断。比如要处理类型标识为customer_records的自定义Flex对象,对应的钩子就是onFlexObjectSaveCustomerRecords,只有保存该类型对象时才会触发回调,逻辑更清晰,性能也更好。
  • 后台场景专属钩子onAdminFlexBeforeSave
    这个钩子仅在Grav Admin后台触发Flex对象保存操作时生效,前台接口、自定义代码触发的Flex保存不会触发该事件,适合仅需要干预后台编辑保存逻辑的场景。

注意:不要在上述保存前的钩子回调中直接调用对象的save()方法,会触发循环调用导致报错。如果需要终止后续保存流程,直接调用$event->stopPropagation()即可。

基础使用示例(插件中注册使用):

// 插件主文件中注册事件
public static function getSubscribedEvents(): array
{
    return [
        'onFlexObjectSave' => 'handleFlexBeforeSave'
    ];
}

// 保存前自定义处理逻辑
public function handleFlexBeforeSave($event)
{
    $flexObj = $event['object'];
    // 仅处理自定义的文章笔记类型Flex对象
    if ($flexObj->getType() !== 'article_notes') {
        return;
    }
    // 自动写入最后修改时间、清理正文内容的危险标签
    $flexObj->last_modified = time();
    $flexObj->content = htmlspecialchars($flexObj->raw_content, ENT_QUOTES);
}

内容的提问来源于stack exchange,提问作者Benni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:30:57