Prestashop通过模块挂载actionCustomerAccountAdd钩子不触发如何解决
Prestashop 客户注册钩子不触发解决方案
- 先删掉你代码中不存在的
createRequiredDBTables方法调用
你代码里没有定义这个方法,直接调用会触发PHP致命错误,导致install方法返回false,模块实际上安装失败,钩子自然没有注册到系统中。修改后的install方法如下:
public function install() { return parent::install() && $this->registerHook('actionCustomerAccountAdd'); }
- 卸载后重新安装模块
修改完install逻辑后,必须先到后台模块列表找到你的SendEmail模块,点击卸载,再重新安装,钩子关联关系才会写入Prestashop数据库。不要只替换代码不重装,旧的注册信息存储在数据库中,不会自动更新。 - 关闭缓存避免代码不生效
进入后台「高级参数」-「性能」页面,关闭所有缓存,清空模板编译缓存后再测试,避免Prestashop加载旧的缓存代码导致修改不生效。 - 更换更可靠的测试方式
不要用echo+die的方式测试,客户注册完成后系统会自动跳转,输出内容会被截断看不到。可以用写本地文件的方式验证钩子是否触发,修改钩子方法如下:
public function hookActionCustomerAccountAdd($params) { // 写日志到网站根目录的hook_test.log文件 file_put_contents(_PS_ROOT_DIR_.'/hook_test.log', date('Y-m-d H:i:s').' 钩子触发,新客户ID:'.$params['customer']->id.PHP_EOL, FILE_APPEND); }
注册完新客户后去网站根目录查看是否生成对应日志文件,有记录就说明钩子已经正常触发。
- 手动排查钩子注册状态
如果以上操作都完成后还是无法触发,可以直接查询数据库确认钩子是否注册成功:查看ps_hook_module表,是否存在id_module为你的SendEmail模块ID、id_hook为actionCustomerAccountAdd对应ID的记录,没有的话说明注册未成功,可以手动添加一条记录或者再检查模块安装逻辑是否有其他错误。
内容的提问来源于stack exchange,提问作者Liam Bonactarian
相关产品推荐
相关产品推荐

