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

考虑这个 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 和可维护性的目的,我真的想委托给。


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


慕村225694
浏览 89回答 1
1回答

largeQ

这是我认为更好的方法:class M extends Cclass C extends Module提示:您的“registerHook”函数不应该在构造函数中。它必须在安装功能中。
打开App,查看更多内容
随时随地看视频慕课网APP