应用插件 版主:官方插件技术组
全局表单编辑钩子问题
类型:迅睿CMS 更新时间:2026-02-04 15:05:41 全局表单
插件 表单系统 V2.7
应用作者 迅睿官方团队
发布时间 2021-03-24 10:37:32
更新时间 2026-01-19 14:32:48

请问一下全局表单是否有

form_edit_before 和 form_edit_after

这两个钩子?



插件教程:https://www.xunruicms.com/doc/app-710.html

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

    image


    对应修改member中的控制器对吗?
  • 开源社区创始人
    #5楼    开源社区创始人
    2026-02-03 13:57:51
    Chrome 0
  • 好好学习
    #6楼    好好学习
    2026-02-03 15:45:24
    Chrome 0
    改控制器文件不影响升级的,随便改
  • 学习狂人
    #7楼    学习狂人
    2026-02-04 15:04:51
    Chrome 0
    <?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
    Chrome 0
    @开源社区创始人:实现了,原来不要修改form主控制器,只须修改对应的表单控制器就行