Как передать данные из одного обработчика событий в другой?

Как пробросить данные из обработчика события onBeforeDelete() в обработчик onAfterDelete() для одного и того же события удаления сущности, не используя глобальные переменные, но используя стандартные объекты событий, такие как EventResult, если такая возможность существует?
  • 1 декабря 2023 г. 9:59
Ответы на вопрос 2
Для того чтобы передать данные из одного обработчика событий в другой, вы можете использовать сам объект события. К примеру, объект Event в Laravel содержит свойство $event->data, которое вы можете использовать для передачи данных. 

Большинство современных фреймворков предлагают мощные средства работы с событиями и обработчиками событий, включая возможность добавления пользовательских свойств к объекту события для передачи данных между обработчиками. 

Например, в обработчике события onBeforeDelete() вы можете передать данные следующим образом:

```php
public function onBeforeDelete($event)
{
    $event->data = 'my data'; // set data 
    ...
}

public function onAfterDelete($event)
{
    $myData = $event->data; // get data
    ...
}
```
Если вы используете EventResult для передачи результата обработки события, вы можете передать данные через класс ResultMutable.

Как это работает:

```php
use Bitrix\Main\EventResult;
const MODIFY_DATA_RESULT_TYPE = 'modifying';

function handlerA(Event $event)
{
    $result = new EventResult(EventResult::MODIFIED, ['example'], MODIFY_DATA_RESULT_TYPE)
    $result->setData(['key' => 'value']);
}

function handlerB(Event $event)
{
    foreach ($event->getResults() as $evenResult) {
        if ($eventResult->getType() == MODIFY_DATA_RESULT_TYPE) {
            $data = $eventResult->getParameters();
            // дальнейшая обработка данных...
        }
    }
}
```
В данном примере handlerB сможет получить данные, которые были добавлены handlerA в объект EventResult. 

Важно помнить, что данные будут доступны только при условии, что handlerB будет выполняться после handlerA.
Создайте в классе статическую переменную. Дожны быть обработчики событий, которые являются методами класса и записывают информацию в эту статическую переменную. 
Похожие вопросы