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

Perfex CRM中after_invoice_added钩子测试失败问题咨询

问题分析与解决方案

哥们,我看你在Perfex CRM的after_invoice_added钩子上踩了几个小坑,咱们一个个来捋清楚:

1. 钩子函数里的前端代码完全无效(核心错误)

你在钩子函数里写了<script>alert('Hello, world!');</script>,这是行不通的!Perfex CRM的钩子是后端PHP钩子,运行在服务器端,不是前端浏览器环境,这种JS代码根本不会被执行,自然看不到任何效果。

2. 为什么add_invoice.log文件没生成?

首先你的钩子函数逻辑错误导致没执行,其次你也没写日志写入的代码。给你一个能正常生成日志的钩子示例:

hooks()->add_action('after_invoice_added','my_after_invoice_added');
function my_after_invoice_added($id) {
    // 定义日志文件路径,确保服务器有写入权限
    $log_file = FCPATH . 'add_invoice.log';
    // 写入内容,比如当前时间和发票ID
    $log_content = date('Y-m-d H:i:s') . " - 发票ID {$id} 已创建\n";
    // 追加写入日志
    file_put_contents($log_file, $log_content, FILE_APPEND);
}

额外注意两点:

  • 要确保FCPATH(Perfex内置的根目录常量)对应的文件夹有写入权限,否则日志文件无法生成
  • 确认钩子文件放在Perfex指定的钩子目录(通常是application/hooks/),且config/hooks.php里已全局启用钩子(你说状态设为true,这部分没问题)

3. 如何获取发票提交的$data变量?

after_invoice_added钩子的官方参数只有$id(刚创建的发票ID),没法直接拿到提交的原始$data数组,但有两种办法解决:

方法一:通过发票ID查询完整数据

用Perfex的内置模型获取发票详情,就能拿到所有字段:

function my_after_invoice_added($id) {
    // 加载发票模型
    $this->CI->load->model('invoices_model');
    // 通过ID获取发票完整数据
    $invoice_data = $this->CI->invoices_model->get($id);
    // 现在$invoice_data就是该发票的完整数组,包含提交的所有信息
    // 可以写入日志验证
    $log_file = FCPATH . 'add_invoice.log';
    $log_content = date('Y-m-d H:i:s') . " - 发票数据:" . print_r($invoice_data, true) . "\n";
    file_put_contents($log_file, $log_content, FILE_APPEND);
}

方法二:改用before_invoice_added钩子

如果你需要在发票创建前获取提交的原始$data,可以换用before_invoice_added钩子,它的参数就是提交的$data数组:

hooks()->add_action('before_invoice_added','my_before_invoice_added');
function my_before_invoice_added($data) {
    // $data就是提交的原始数据,可以直接使用
    $log_file = FCPATH . 'add_invoice.log';
    $log_content = date('Y-m-d H:i:s') . " - 提交的发票数据:" . print_r($data, true) . "\n";
    file_put_contents($log_file, $log_content, FILE_APPEND);
}

4. 验证钩子是否触发的小技巧

除了日志,你还可以用更直观的方式测试,比如在钩子函数里发邮件确认:

function my_after_invoice_added($id) {
    $this->CI->load->library('email');
    $this->CI->email->from('your@email.com', 'Perfex Hook Test');
    $this->CI->email->to('test@email.com');
    $this->CI->email->subject('发票创建钩子触发');
    $this->CI->email->message('发票ID '.$id.' 已创建,钩子正常运行!');
    $this->CI->email->send();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:52:36