Делегирование обработчика перехвата модуля M в классе C не работает: этот обработчик не запущен - PullRequest
0 голосов
/ 25 февраля 2020

Рассмотрим этот модуль Prestashop 1.7 M:

class M extends Module
{

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

Как видите, я даю его экземпляр классу C. Код последнего:

<code>class C {

    public function __construct($mod) {
        $mod->registerHook('actionObjectCustomerAddAfter');
    }

    public function hookActionObjectCustomerAddAfter($data) {
        $client = $data['object'];
        echo '<pre>';
            echo ' $client ';
            var_dump($client);
        echo '
'; Выход; }}

Ожидаемое поведение будет следующим: если я создаю клиента в Prestashop, то выполняется дамп, а также exit, в результате чего получается пустая страница с текстом дампа. .

Фактическое поведение таково: если я создаю клиента в Prestashop, дамп не выполняется, exit тоже не выполняется, что приводит к странице со списком клиентов с вновь созданным клиентом и уведомлением. сообщая мне, что новый клиент был создан.

Ожидаемое поведение можно получить, не используя класс C и перемещая код последнего в пределах класса M. Тем не менее, я действительно хочу делегировать C, в целях обеспечения легкости и удобства обслуживания.

Как я могу это сделать? Почему это не работает?

1 Ответ

1 голос
/ 25 февраля 2020

Я думаю, это лучший способ:

class M extends C

class C extends Module

Совет: ваша функция "registerHook" не должна быть в конструкторе. Должно быть в функции Install.

...