Вообще, исчерпывающую информацию на этот вопрос дает
официальная документация по файлу init.php.
Обработчики событий лучше группировать в одном файле и тщательно аннотировать где они используются и какая задача перед ними стоит.
Про способы организации кода это довольно узкая тематика.
Если Вы 100% уверены, что они еще пригодятся на других проектах (и у Вас уже есть подобные заказы), то предпочтительнее делать модуль.
Если это хардкорная интеграция только для существующего проекта, то init.php(*).
Мы, например, придерживаемся последнего варианта:
1) В директории /local/php_interface/ создаем следующие файлы:
- init.php (Содержит подключение других файлов + автолоадер)
- constants.php (Содержит только константы, актуальные для данного проекта)
- events.php (содержит подписки на события, но логика их обработки не находится в этом файле)
2) В директории /local/php_interface/classes/ по PSR размещаем класс для проекта.
Например:
init.php:
/**
* - /local/classes/{Path|raw}/{*|raw}.php
* - /local/classes/{Path|ucfirst,lowercase}/{*|ucfirst,lowercase}.php
*/
spl_autoload_register(function($sClassName)
{
$sClassFile = __DIR__.'/classes';
if ( file_exists($sClassFile.'/'.str_replace('\\', '/', $sClassName).'.php') )
{
require_once($sClassFile.'/'.str_replace('\\', '/', $sClassName).'.php');
}
$arClass = explode('\\', strtolower($sClassName));
foreach($arClass as $sPath )
{
$sClassFile .= '/'.ucfirst($sPath);
}
$sClassFile .= '.php';
if (file_exists($sClassFile))
{
require_once($sClassFile);
}
});
/**
* File with event handlers
*/
require_once(__DIR__.'/events.php');
events.php:
$eventManager = \Bitrix\Main\EventManager::getInstance();
/**
* For new core of bitrix use
* $eventManager->addEventHandler( #module#, #handler#, [#namespace#, #function#]);
*
* For old core of bitrix use
* $eventManager->addEventHandlerCompatible( #module#, #handler#, [#namespace#, #function#]);
*/
$eventManager->addEventHandlerCompatible("module", "event", ['\\Project\\Module\\Event\\Handler', 'onEvent']);