50 lines
1.5 KiB
PHP
50 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Application\Settings\SettingsInterface;
|
|
use App\Service\OpenWeatherClient;
|
|
use GuzzleHttp\Client;
|
|
use DI\ContainerBuilder;
|
|
use Monolog\Handler\StreamHandler;
|
|
use Monolog\Logger;
|
|
use Monolog\Processor\UidProcessor;
|
|
use Psr\Container\ContainerInterface;
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
return function (ContainerBuilder $containerBuilder) {
|
|
$containerBuilder->addDefinitions([
|
|
LoggerInterface::class => function (ContainerInterface $c) {
|
|
$settings = $c->get(SettingsInterface::class);
|
|
|
|
$loggerSettings = $settings->get('logger');
|
|
$logger = new Logger($loggerSettings['name']);
|
|
|
|
$processor = new UidProcessor();
|
|
$logger->pushProcessor($processor);
|
|
|
|
$handler = new StreamHandler($loggerSettings['path'], $loggerSettings['level']);
|
|
$logger->pushHandler($handler);
|
|
|
|
return $logger;
|
|
},
|
|
|
|
Client::class => function () {
|
|
return new Client([
|
|
'headers' => [
|
|
'Accept' => 'application/json',
|
|
'User-Agent' => 'Slim-Weather/1.0',
|
|
],
|
|
]);
|
|
},
|
|
|
|
OpenWeatherClient::class => function (ContainerInterface $c) {
|
|
$apiKey = getenv('OPENWEATHER_API_KEY') ?: '';
|
|
if ($apiKey === '') {
|
|
throw new \RuntimeException('OPENWEATHER_API_KEY is not configured');
|
|
}
|
|
return new OpenWeatherClient($c->get(Client::class), $apiKey);
|
|
},
|
|
]);
|
|
};
|