Не работает хук

InstantCMS 2.X
#1 5 мая 2020 в 10:56
Привет. Пытаюсь с хуками разобраться. Пишу компонент. Создал хук на событие редактирования профиля. И пытаюсь изменить данные в таблице.
  1. class onAppointmentUsersAfterUpdate extends cmsAction {
  2.  
  3. public function run($profile){
  4.  
  5. $this->cms_model->update('appointment_events',$profile['id'],'title=www');
  6.  
  7. return $profile;
  8.  
  9. }
  10.  
  11. }
Но не хочет работать. Постоянно системные ошибки.
  1. Notice: Undefined index: id in W:\domains\nevline\system\controllers\appointment\hooks\users_after_update.php on line 11
  2.  
  3. Warning: Invalid argument supplied for foreach() in W:\domains\nevline\system\core\database.php on line 456
  4.  
  5. Warning: Cannot modify header information - headers already sent by (output started at W:\domains\nevline\system\controllers\appointment\hooks\users_after_update.php:11) in W:\domains\nevline\system\core\controller.php on line 1029
  6.  
  7. Warning: Cannot modify header information - headers already sent by (output started at W:\domains\nevline\system\controllers\appointment\hooks\users_after_update.php:11) in W:\domains\nevline\system\core\controller.php on line 1031
Пытался и на 'user_profile_update' вешать.Та же беда.
#2 5 мая 2020 в 11:48
$profile не плохо б было сначала получить
#3 5 мая 2020 в 12:17

$profile не плохо б было сначала получить

Олег Васильевич я
А зачем? Не в этом ли смысл хуков, что бы получать "без получения"). Я же отлавливаю событие, в котором уже есть параметр. Я так понимаю. Или нет?
#4 5 мая 2020 в 12:20
Lora,
Посмотрите сначала, что в этот хук вообще прилетает.
  1. class onAppointmentUsersAfterUpdate extends cmsAction {
  2.  
  3. public function run($profile){ dump($profile);
  4.  
#5 5 мая 2020 в 12:20

Но не хочет работать. Постоянно системные ошибки.

Lora

И не захочет laughПотому что надо вот так:
  1.  
  2. class onAppointmentUsersAfterUpdate extends cmsAction {
  3.  
  4. public function run($profile){
  5.  
  6. list($profile, $old) = $profile;
  7.  
  8. $this->cms_model->update('appointment_events',$profile['id'],'title=www');
  9.  
  10. return ($profile, $old);
  11.  
  12. }
  13.  
  14. }
  15.  
#6 5 мая 2020 в 12:24
Не думаю). Но попробую. Если отлавливать 'user_profile_update', то там один параметр. Но та же хрень). К тому же почему пишет, что id не определенна?
#7 5 мая 2020 в 12:29
list($profile, $old) = $profile;
Ошибка пропала. Уже прогресс).
#8 5 мая 2020 в 12:32

К тому же почему пишет, что id не определенна?

Lora

Потому, что в строке
  1. public function run($profile)
переменная $profile содержит два массива, а не профиль как вы думаете. Думаю, что-то типа этого сработает в вашем примере

  1. $profile[0]['id']
В моём примере должно сработать без [0]
#9 5 мая 2020 в 12:34

Ошибка пропала. Уже прогресс).

Lora

  1. return ($profile, $old);
Это тоже не забывайте
#10 5 мая 2020 в 12:37
Вообще то один).
  1. Array ( [id] => 1 [groups] => Array ( [0] => 6 ) [service] => 4,5,6 [email] =>
Не понимаю почему list? Но не суть. Это вывод в профиле. По идее в хуке должно быть тоже самое.
#11 5 мая 2020 в 12:40
К тому же в подобном файле компонента auth, используется $profile['email'], например.
#12 5 мая 2020 в 12:46

А зачем? Не в этом ли смысл хуков, что бы получать "без получения")

Lora
Я не имел ввиду новое получение. Я имел ввиду, что неплохо б узнать что она собой представляет и что содержит (точно ли массив и есть ли в нём id)
#13 5 мая 2020 в 12:49
… и на всякий случай вопрос: события обновил?
#14 5 мая 2020 в 12:52

Вообще то один).

Lora

Вы заставили меня запустить локальный сервер… Передается два массива. В первом — профиль новый, во втором — старый. По крайней мере на первый взгляд это так. Последняя строка должна выглядеть вот так:
  1. return array($profile, $old);
#15 5 мая 2020 в 12:53

и на всякий случай вопрос: события обновил?

Олег Васильевич я

Ошибки же выдаёт, значит обновил.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.