业务经理

微信扫描以上二维码

028-61286886

技术咨询

全局表单编辑钩子问题

迅睿框架 更新 2026-02-04 15:05:41 学习狂人

请问一下全局表单是否有

form_edit_before 和 form_edit_after

这两个钩子?



方案

  • 开源社区创始人 #1 · 2026-02-03 06:32:09
    没有,因为表单form没有做修改功能,只有post钩子没有edit钩子
  • 学习狂人 #2 · 2026-02-03 10:34:50
    开源社区创始人 会员中心修改想执行修改后的动作如何操作呢,是自己写钩子吗?
  • 开源社区创始人 #3 · 2026-02-03 10:57:20
    满意答案
    不用,重写表单控制器就行了
  • 学习狂人 #4 · 2026-02-03 12:26:54
    开源社区创始人 比如我的表单控制器是baozhang.php

    image


    对应修改member中的控制器对吗?
  • 开源社区创始人 #5 · 2026-02-03 13:57:51
  • 好好学习 #6 · 2026-02-03 15:45:24
    改控制器文件不影响升级的,随便改
  • 学习狂人 #7 · 2026-02-04 15:04:51
    <?php namespace Phpcmf\Controllers\Member;
    
    /**
     * 二次开发时可以修改本文件,不影响升级覆盖
     */
    
    class Ysbcd extends \Phpcmf\Member\Form
    {
        // 保存编辑前的旧数据
        protected $_old_data_for_hook = null;
    
        public function index() {
            $this->_Member_List();
        }
    
        public function add() {
            $this->_Member_Add();
        }
    
        public function edit() {
            // 获取编辑前的数据用于钩子
            $id = intval(\Phpcmf\Service::L('input')->get('id'));
            if ($id && IS_AJAX_POST) {
                $this->_old_data_for_hook = $this->_Data($id);
            }
            $this->_Member_Edit();
        }
    
        public function order_edit() {
            $this->_Member_Order();
        }
    
        public function del() {
            $this->_Member_Del();
        }
    
        /**
         * 重写 _Call_Post 方法,在保存完成后触发编辑钩子
         */
        protected function _Call_Post($data) {
            // 如果是编辑操作(有旧数据),触发编辑钩子
            if ($this->_old_data_for_hook) {
                // 合并主表和附表数据
                $new_data = [];
                if (isset($data[1]) && is_array($data[1])) {
                    $new_data = $data[1];
                }
                if (isset($data[0]) && is_array($data[0])) {
                    $new_data = array_merge($new_data, $data[0]);
                }
                
                // 触发编辑钩子
                \Phpcmf\Hooks::trigger('form_edit_after', $new_data, $this->_old_data_for_hook);
            }
            
            return dr_return_data(1, dr_lang('操作成功'), $data);
        }
    }
  • 学习狂人 #8 · 2026-02-04 15:05:41
    @开源社区创始人:实现了,原来不要修改form主控制器,只须修改对应的表单控制器就行

迅睿系统漏洞

GeoSeo收录宝
GeoSeo收录宝(2026-09-16)
ai发布增强: 1 新增Cron 心跳记录,任务列表实时显示。 ...
导入微信文章
导入微信文章(2026-09-15)
优化排版缺少文字情况
GEO系统
GEO系统(2026-09-15)
运营客户端,防止误触阴影处关闭对话框
独立站群系统
独立站群系统(2026-09-14)
子站独立部署时修复同步附件失败问题
在线客服
在线客服(2026-09-13)
修复删除会话报错问题 删除会话时联动删除聊天图片
在线考试竞赛系统
在线考试竞赛系统(2026-09-12)
增加投票功能 考试功能拓展 注意:更新后需要执行系统更新,更新数...
网上信箱
网上信箱(2026-09-12)
修复新版本兼容问题
GeoSeo工具箱
GeoSeo工具箱(2026-09-11)
修正历史记录推送
微信系统
微信系统(2026-09-11)
增加数据统计总览界面 账号管理增加服务和公众号的区别 菜单管理支持更...
答题系统
答题系统(2026-09-11)
一站式在线答题系统,支持真题考试、题库练习和错题本,适合培训、考证、...