温馨提示:本文翻译自stackoverflow.com,查看原文请点击:php - Delegating the hook handler of a module M in a class C doesn't work: this handler is not triggered
delegates hook php prestashop prestashop-1.7

php - 在类C中委派模块M的挂钩处理程序不起作用:不会触发此处理程序

发布于 2020-05-13 18:53:01

考虑此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,从而导致包含新创建的客户的客户列表页面和一条通知,告知我已经创建了新客户。

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

我该怎么办?为什么不起作用?

查看更多

提问者
JarsOfJam-Scheduler
被浏览
13
Mahdi Shad 2020-02-25 19:31

我认为这是更好的方法:

class M extends C

class C extends Module

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