From 57360e5fea6f11516beeaf995c951a05a6af50ea Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Mon, 22 Jun 2020 10:33:34 +0300 Subject: [PATCH] container default loaders --- application/Espo/Core/Application.php | 13 ++- application/Espo/Core/Container.php | 56 ++----------- application/Espo/Core/Loaders/Config.php | 45 +++++++++++ application/Espo/Core/Loaders/FileManager.php | 50 ++++++++++++ application/Espo/Core/Loaders/Log.php | 79 +++++++++++++++++++ application/Espo/Core/Loaders/Metadata.php | 53 +++++++++++++ application/Espo/Core/Portal/Application.php | 2 +- 7 files changed, 245 insertions(+), 53 deletions(-) create mode 100644 application/Espo/Core/Loaders/Config.php create mode 100644 application/Espo/Core/Loaders/FileManager.php create mode 100644 application/Espo/Core/Loaders/Log.php create mode 100644 application/Espo/Core/Loaders/Metadata.php diff --git a/application/Espo/Core/Application.php b/application/Espo/Core/Application.php index 8e81824b32..d65269db4e 100644 --- a/application/Espo/Core/Application.php +++ b/application/Espo/Core/Application.php @@ -42,6 +42,10 @@ use Espo\Core\{ Utils\Route, Utils\Autoload, Portal\Application as PortalApplication, + Loaders\Config as ConfigLoader, + Loaders\Log as LogLoader, + Loaders\FileManager as FileManagerLoader, + Loaders\Metadata as MetadataLoader, }; class Application @@ -54,6 +58,13 @@ class Application private $auth; + protected $loaderClassNames = [ + 'config' => ConfigLoader::class, + 'log' => LogLoader::class, + 'fileManager' => FileManagerLoader::class, + 'metadata' => MetadataLoader::class, + ]; + public function __construct() { date_default_timezone_set('UTC'); @@ -66,7 +77,7 @@ class Application protected function initContainer() { - $this->container = new Container(ContainerConfiguration::class); + $this->container = new Container(ContainerConfiguration::class, $this->loaderClassNames); } // TODO make protected diff --git a/application/Espo/Core/Container.php b/application/Espo/Core/Container.php index bba1e97405..2f4f3609db 100644 --- a/application/Espo/Core/Container.php +++ b/application/Espo/Core/Container.php @@ -40,10 +40,13 @@ class Container { private $data = []; + private $loaderClassNames; + protected $configuration; - public function __construct(string $configurationClassName) + public function __construct(string $configurationClassName, array $loaderClassNames = []) { + $this->loaderClassNames = $loaderClassNames; $this->configuration = $this->get('injectableFactory')->create($configurationClassName); } @@ -100,7 +103,7 @@ class Container return; } - $loaderClassName = $this->configuration->getLoaderClassName($name); + $loaderClassName = $this->loaderClassNames[$name] ?? $this->configuration->getLoaderClassName($name); $object = null; @@ -147,40 +150,6 @@ class Container ); } - protected function loadLog() - { - $config = $this->get('config'); - - $path = $config->get('logger.path', 'data/logs/espo.log'); - $rotation = $config->get('logger.rotation', true); - - $log = new \Espo\Core\Utils\Log('Espo'); - $levelCode = $log::toMonologLevel($config->get('logger.level', 'WARNING')); - - if ($rotation) { - $maxFileNumber = $config->get('logger.maxFileNumber', 30); - $handler = new \Espo\Core\Utils\Log\Monolog\Handler\RotatingFileHandler($path, $maxFileNumber, $levelCode); - } else { - $handler = new \Espo\Core\Utils\Log\Monolog\Handler\StreamHandler($path, $levelCode); - } - $log->pushHandler($handler); - - $errorHandler = new \Monolog\ErrorHandler($log); - $errorHandler->registerExceptionHandler(null, false); - $errorHandler->registerErrorHandler([], false); - - $GLOBALS['log'] = $log; - - return $log; - } - - protected function loadFileManager() - { - return new \Espo\Core\Utils\File\Manager( - $this->get('config') - ); - } - protected function loadControllerManager() { return new \Espo\Core\ControllerManager( @@ -195,13 +164,6 @@ class Container return $this->get('entityManager')->getEntity('Preferences', $this->get('user')->id); } - protected function loadConfig() - { - return new \Espo\Core\Utils\Config( - new \Espo\Core\Utils\File\Manager() - ); - } - protected function loadHookManager() { return new \Espo\Core\HookManager( @@ -237,14 +199,6 @@ class Container ); } - protected function loadMetadata() - { - return new \Espo\Core\Utils\Metadata( - $this->get('fileManager'), - $this->get('config')->get('useCache') - ); - } - protected function loadSchema() { return new \Espo\Core\Utils\Database\Schema\Schema( diff --git a/application/Espo/Core/Loaders/Config.php b/application/Espo/Core/Loaders/Config.php new file mode 100644 index 0000000000..38f7bb7202 --- /dev/null +++ b/application/Espo/Core/Loaders/Config.php @@ -0,0 +1,45 @@ +config = $config; + } + + public function load() + { + return new FileManagerService($this->config); + } +} diff --git a/application/Espo/Core/Loaders/Log.php b/application/Espo/Core/Loaders/Log.php new file mode 100644 index 0000000000..5e53844c36 --- /dev/null +++ b/application/Espo/Core/Loaders/Log.php @@ -0,0 +1,79 @@ +config = $config; + } + + public function load() + { + $config = $this->config; + + $path = $config->get('logger.path', 'data/logs/espo.log'); + $rotation = $config->get('logger.rotation', true); + + $log = new LogService('Espo'); + $levelCode = $log::toMonologLevel($config->get('logger.level', 'WARNING')); + + if ($rotation) { + $maxFileNumber = $config->get('logger.maxFileNumber', 30); + $handler = new RotatingFileHandler($path, $maxFileNumber, $levelCode); + } else { + $handler = new StreamHandler($path, $levelCode); + } + $log->pushHandler($handler); + + $errorHandler = new MonologErrorHandler($log); + $errorHandler->registerExceptionHandler(null, false); + $errorHandler->registerErrorHandler([], false); + + $GLOBALS['log'] = $log; + + return $log; + } +} diff --git a/application/Espo/Core/Loaders/Metadata.php b/application/Espo/Core/Loaders/Metadata.php new file mode 100644 index 0000000000..7d21e64aa2 --- /dev/null +++ b/application/Espo/Core/Loaders/Metadata.php @@ -0,0 +1,53 @@ +fileManager = $fileManager; + $this->config = $config; + } + + public function load() + { + return new MetadataService($this->fileManager, $this->config->get('useCache')); + } +} diff --git a/application/Espo/Core/Portal/Application.php b/application/Espo/Core/Portal/Application.php index 94780e8d44..e8c45b8d8c 100644 --- a/application/Espo/Core/Portal/Application.php +++ b/application/Espo/Core/Portal/Application.php @@ -76,7 +76,7 @@ class Application extends \Espo\Core\Application protected function initContainer() { - $this->container = new PortalContainer(PortalContainerConfiguration::class); + $this->container = new PortalContainer(PortalContainerConfiguration::class, $this->loaderClassNames); } protected function getPortal()