Configure application timezone globally

This commit is contained in:
Igor Scheller 2020-04-21 11:53:19 +02:00 committed by msquare
parent e2e2ac0c68
commit 2b1ccb6406
4 changed files with 66 additions and 4 deletions

View File

@ -10,6 +10,7 @@ return [
\Engelsystem\Logger\LoggerServiceProvider::class,
\Engelsystem\Exceptions\ExceptionsServiceProvider::class,
\Engelsystem\Config\ConfigServiceProvider::class,
\Engelsystem\Helpers\ConfigureEnvironmentServiceProvider::class,
// Request handling
\Engelsystem\Http\UrlGeneratorServiceProvider::class,

View File

@ -22,11 +22,8 @@ $app->bootstrap($appConfig);
/**
* Configure application
* Configure environment
*/
$timezone = $app->get('config')->get('timezone');
ini_set('date.timezone', $timezone);
if (config('environment') == 'development') {
$errorHandler = $app->get('error.handler');
$errorHandler->setEnvironment(Handler::ENV_DEVELOPMENT);

View File

@ -0,0 +1,29 @@
<?php
namespace Engelsystem\Helpers;
use Carbon\CarbonTimeZone;
use Engelsystem\Config\Config;
use Engelsystem\Container\ServiceProvider;
class ConfigureEnvironmentServiceProvider extends ServiceProvider
{
public function register()
{
/** @var Config $config */
$config = $this->app->get('config');
$timezone = new CarbonTimeZone($config->get('timezone'));
$this->setTimeZone($timezone);
}
/**
* @param CarbonTimeZone $timeZone
* @codeCoverageIgnore
*/
protected function setTimeZone(CarbonTimeZone $timeZone)
{
ini_set('date.timezone', $timeZone);
date_default_timezone_set($timeZone);
}
}

View File

@ -0,0 +1,35 @@
<?php
namespace Engelsystem\Test\Unit\Helpers;
use Carbon\CarbonTimeZone;
use Engelsystem\Config\Config;
use Engelsystem\Helpers\ConfigureEnvironmentServiceProvider;
use Engelsystem\Test\Unit\ServiceProviderTest;
use PHPUnit\Framework\MockObject\MockObject;
class ConfigureEnvironmentServiceProviderTest extends ServiceProviderTest
{
/**
* @covers \Engelsystem\Helpers\ConfigureEnvironmentServiceProvider::register
*/
public function testRegister()
{
$config = new Config(['timezone' => 'Australia/Eucla']);
$this->app->instance('config', $config);
/** @var ConfigureEnvironmentServiceProvider|MockObject $serviceProvider */
$serviceProvider = $this->getMockBuilder(ConfigureEnvironmentServiceProvider::class)
->setConstructorArgs([$this->app])
->onlyMethods(['setTimeZone'])
->getMock();
$serviceProvider->expects($this->once())
->method('setTimeZone')
->willReturnCallback(function (CarbonTimeZone $timeZone) {
$this->assertEquals('Australia/Eucla', $timeZone->getName());
});
$serviceProvider->register();
}
}