Вызов метода поведения CakePHP Behaviors возвращает ошибку

Я работаю с cakephp для личного использования. Теперь я понял, что хочу создать некоторые функции, которые будут повторяться во многих моделях моего проекта, поэтому из документов Cakephp я узнал, что лучший способ сделать это — использовать Behaviors.

Цель: Каждый раз, когда создается новая сущность моих моделей проектов, я хочу, чтобы некоторые пользователи (коллеги) получали уведомления по электронной почте. Например, добавлен новый проект, добавлена ​​новая задача и т. д.

Что достигнуто на данный момент Я создал поведение с прослушивателем событий afeterSave; Я прикрепил его к одной из своих моделей. Когда я создаю, я добавляю новую задачу, она запускает методы поведения и отправляет простое электронное письмо.

Проблема Проблема заключается в том, чтобы узнать, что модель ведьмы вызвала событие. Я прочитал документы cake2.x и событие afterSave, используемое для получения события и модели, в которой вы можете вызвать псевдоним, чтобы узнать имя модели. :

public function afterSave(Model $model,...){
     $model_name = $model->alias;
     if ($model_name == 'some_model'){
      //code for specific model
      } else (...)
 }

Однако в cakephp 3.9 мы получаем Event и EntityInterface:

public function afterSave(Event $event, EntityInterface $model)
   {
    
    # I tried $mail_HTMLmessage= $model->_registryAlias;
    # I tried $mail_HTMLmessage= $model->_className;
    # I tried $mail_HTMLmessage= $model->get('className');
    $this->sendMail($mail_HTMLmessage);// this is another method that i defined in my behavior that sends an email to me with the string mail_HTMLmessage as the mail message.

     return true;
   }

Я протестировал mail_HTMLmessage=$event-›getName() и в своем письме получил event.afterSave, как и ожидалось. Однако все, что я пытался получить имя модели/класса, возвращало пустую строку.

Можно ли узнать название модели? и как лучше всего это сделать?

заранее спасибо


person Osceptrus    schedule 05.07.2021    source источник


Ответы (1)


Я считаю, что то, что вы ищете, вовсе не в событии, а в сущности. getSource(), если быть точным.

person Greg Schmidt    schedule 05.07.2021
comment
Привет, Грег, да, на самом деле это был мой вопрос, как получить модель, которая в 3.9 является сущностью. Извините, если я пропущу объяснение себя. Я просмотрел свой пост и на самом деле я написал неправильно, когда сказал, что я получил model.afterSave, я получил event.afterSave, и это было просто, чтобы показать, что код в порядке, просто я не мог получить псевдоним или имя модели. Я попробую getSource(). Спасибо за ваш быстрый ответ - person Osceptrus; 06.07.2021
comment
Он работал идеально, как и ожидалось; публичная функция afterSave(Event $event, EntityInterface $model) { $mail_HTMLmessage= $model-›getSource(); $this-›sendMail($mail_HTMLmessage);// это еще один метод, который я определил в своем поведении, который отправляет мне электронное письмо со строкой mail_HTMLmessage в качестве почтового сообщения. } В своем электронном письме я получил название модели во множественном числе, например Tasks. - person Osceptrus; 06.07.2021
comment