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

Delegating the hook handler of a module M in a class C doesn't work: this handler is not triggered

考虑这个 Prestashop 1.7 模块 M:

class M extends Module
{

    public function __construct()
    {
         $this->c = new Negoce\Classes\C($this);
    }
}

如您所见,我将它的实例给了一个 class 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 也不会,导致客户列表页面显示新创建的客户和通知告诉我新客户已创建。

可以通过不使用 class C 并在 class M 中移动后者的代码来获得预期的行为。但是,出于易用性和可维护性的目的,我真的想委托给 C

我该怎么做?为什么它不起作用?

这是我认为更好的方法:

class M extends C

class C extends Module

提示:您的 "registerHook" 函数不应位于构造函数中。它必须在安装函数中。