Php 在类C中委托模块M的钩子处理程序不会';t工作:未触发此处理程序
考虑这一Prestashop 1.7模块M:Php 在类C中委托模块M的钩子处理程序不会';t工作:未触发此处理程序,php,delegates,prestashop,hook,prestashop-1.7,Php,Delegates,Prestashop,Hook,Prestashop 1.7,考虑这一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->registerH
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;
}
}
C类{
公共函数构造($mod){
$mod->registerHook('actionObjectCustomerAddAfter');
}
公共函数hookActionObjectCustomerAddAfter($data){
$client=$data['object'];
回声';
class M extends C
class C extends Module
回显“$client”;
class M extends C
class C extends Module
var_dump($客户);
回声';
class M extends C
class C extends Module
出口
}
}
预期的行为是:如果我在Prestashop中创建了一个客户,那么转储将被执行,退出
,从而产生一个包含转储文本的空白页面
实际行为是:如果我在Prestashop中创建了一个客户,则转储不会执行,退出
也不会执行,从而导致客户列表页面显示新创建的客户,并显示一条通知,告诉我新客户已创建
通过不使用类C
并在类M
中移动后者的代码,可以获得预期的行为。然而,出于可实现性和可维护性的目的,我真的想委托给C
我怎么做呢?为什么不起作用?我认为这是一种更好的方式: 提示:您的“registerHook”函数不应位于构造函数中。它必须在安装功能中