用途:在 Perfex CRM(基于 CodeIgniter 3)代码库中开发时,优先使用 Perfex 自有的 options、hooks、CI 加载器与认证辅助函数,而非原生 SQL 或原生 CI3,并规避会静默破坏自定义代码的陷阱。
主要能力与要点:
- Options:get_option 不接受第二个默认值参数,缺失时返回空字符串,应写 get_option('key') ?: 'fallback';写入用 update_option,仅在缺失时插入用 add_option。
- CI 加载器:控制器/模型内 $this 即 CI 超级对象,其他位置用 get_instance();查询表名必须用 db_prefix(),不可硬编码 tbl。
- 钩子系统:仿 WordPress 的 action/filter,用 hooks()->add_action / add_filter / do_action / apply_filters。accepted_args 默认为 1,回调需要多参数时必须显式传入,否则只收到第一个参数。文中列出 app_init、app_admin_head、contact_created、after_client_created、before_invoice_added 等核心钩子及各自回调参数形态,并提示命名不一致(如 after_client_created 与 contact_created 并存),建议在核心源码中检索 do_action 确认。
- 认证辅助:is_staff_logged_in、is_client_logged_in、get_staff_user_id、get_contact_user_id、get_client_user_id、staff_can 等,不要直接信任 $_SESSION。
- 日志:log_message 在生产环境为 no-op(log_threshold=0),需要可追溯记录时用 log_activity 写入数据库活动日志。
- 常用辅助函数:site_url、admin_url、_l、format_money、html_purify、app_generate_hash、get_csrf_for_ajax、register_cron_task、module_dir_url 等。
- 表单渲染:render_input、render_textarea、render_select 生成 Bootstrap 3 表单组,label 参数先按语言键解析,不存在则原样显示。
限制与注意:last_query 仅在 save_queries 为 TRUE 时可用;模型文件名大小写需与加载名一致;_l() 内部始终调用 sprintf,参数应直接传给 _l(),不要外层再套 sprintf。资料未提供收费、价格与平台信息。