为了账号安全,请及时绑定邮箱和手机立即绑定

在类 C 中委派模块 M 的钩子处理程序不起作用:此处理程序未触发

在类 C 中委派模块 M 的钩子处理程序不起作用:此处理程序未触发

PHP
慕村225694 2022-10-09 17:44:34
考虑这个 Prestashop 1.7 模块 M:class M extends Module{    public function __construct()    {         $this->c = new Negoce\Classes\C($this);    }}如您所见,我将它的实例赋予一个类C。后者的代码是:class C {    public function __construct($mod) {        $mod->registerHook('actionObjectCustomerAddAfter');    }    public function hookActionObjectCustomerAddAfter($data) {        $client = $data['object'];        echo '<pre>';            echo ' $client ';            var_dump($client);        echo '</pre>';        exit;    }}预期的行为是:如果我在 Prestashop 中创建客户,则执行转储,然后执行转储exit,从而生成带有转储文本的空白页。实际行为是:如果我在 Prestashop 中创建客户,则不会执行转储,也不会执行转储exit,导致客户列表页面显示新创建的客户,并通知我新客户已创建。可以通过不使用类C并在类中移动后者的代码来获得预期的行为M。C但是,出于 lisibility 和可维护性的目的,我真的想委托给。我怎么能做到?为什么它不起作用?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

这是我认为更好的方法:


class M extends C


class C extends Module

提示:您的“registerHook”函数不应该在构造函数中。它必须在安装功能中。


查看完整回答
反对 回复 2022-10-09
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信