296  /  382
Справочник

"Ленивые" параметры в событиях

Просмотров: 21603
Дата последнего изменения: 13.11.2023
Роберт Басыров
Сложность урока:
2 уровень - несложные понятия и действия, но не расслабляйтесь.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

Чтобы отправить событие выполните следующее:

use Bitrix\Main\EventManager;

$event = new \Bitrix\Main\Event('moduleName', 'onEventName', array(
	'data' => array(
		'name' => 'John',
		'sex' => 'male',
		),
	'datetime' => new \Datetime(),
));

$event->send();

Таким образом отправится событие от модуля moduleName с именем onEventName и данными, которые будут доступны в обработчиках этого события.

В некоторых ситуациях вычисление данных для отправки требует привлечения дополнительных ресурсов. В такой ситуации сконфигурируйте объект иначе:

use Bitrix\Main\EventManager;

$lazyEvent = new \Bitrix\Main\Event('moduleName', 'onEventName', function() use ($userId){
    
//какая-то работа, которая получает данные
	$groups = loadUserGroups($userId);
    
	return array(
		'data' => array(
			'name' => 'John',
			'sex' => 'male',
			'groups' => $groups,
		),
		'datetime' => new \Datetime(),
	);
});


$Lazyevent->send();

В таком случае вычисление параметров события будет отложено до первого обращения к ним в обработчике. В итоге получается два преимущества:

  1. Если нет обработчиков, то не будут запускаться вычисления.
  2. Если в обработчиках не используются параметры события, то снова не будут запускаться вычисления.

Примечание: Доступно с версии главного модуля 17.0.0.


17
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии