<?php
+use Civi\Core\Format;
+
/**
* Class Civi
*
* @return \Symfony\Component\EventDispatcher\EventDispatcherInterface
*/
public static function dispatcher() {
- return Civi\Core\Container::singleton()->get('dispatcher');
+ // NOTE: The dispatcher object is initially created as a boot service
+ // (ie `dispatcher.boot`). For compatibility with the container (eg
+ // `RegisterListenersPass` and `createEventDispatcher` addons),
+ // it is also available as the `dispatcher` service.
+ //
+ // The 'dispatcher.boot' and 'dispatcher' services are the same object,
+ // but 'dispatcher.boot' is resolvable earlier during bootstrap.
+ return Civi\Core\Container::getBootService('dispatcher.boot');
}
/**
}
/**
- * @return \CRM_Core_Error_Log
+ * Find or create a logger.
+ *
+ * @param string $channel
+ * Symbolic name (or channel) of the intended log.
+ * This should correlate to a service "log.{NAME}".
+ *
+ * @return \Psr\Log\LoggerInterface
*/
- public static function log() {
- return Civi\Core\Container::singleton()->get('psr_log');
+ public static function log($channel = 'default') {
+ return \Civi\Core\Container::singleton()->get('psr_log_manager')->getLog($channel);
}
/**
return \Civi\Core\Container::getBootService('paths');
}
+ /**
+ * Obtain the formatting object.
+ *
+ * @return \Civi\Core\Format
+ */
+ public static function format(): Format {
+ return new Civi\Core\Format();
+ }
+
/**
* Fetch a service from the container.
*