Ubuntu14.04サーバーにsymfony3アプリケーションをデプロイしています。
コマンドウィンドウで"date"を実行すると、サーバーが応答します"Fri May 11 10 :02:30 CEST 2018 "しかし、日時をtwig as" {{dump( " now "| date)}}"、応答は"May 11、2018 04:04"です。
コントローラ関数(route)のヘッダーを挿入すると、"date_default_timezone_set(" Europe/Madrid ");"正常に動作しますが、すべてのコントローラーのすべての機能でこの行をコピーしたくない。
次に、Symfonyの設定としてタイムゾーンをどこに設定できるか、またはこれをどこに設定できるかを知りたいPHPコマンド(date_default_timezone_set( "Europe /マドリッド "))すべてのコントローラーに対してグローバルに。
ありがとうございました
[編集]
1つの解決策は、このコードをコントローラーのヘッダーに配置することもできますが、すべてのコントローラー、サービスなどではなく、1つに設定したいと思います。
public function __construct(){
date_default_timezone_set("Europe/Madrid");
}
_php.ini
_で設定できない場合、またはターゲット環境に関係なく値の一貫性を確保したい場合、最も簡単な方法はAppBundleで設定することです。
_class AppBundle extends Bundle
{
public function boot()
{
parent::boot();
date_default_timezone_set("Europe/Madrid");
}
}
_
または、AppBundle(または他の独自のバンドル)がない場合は、バンドルが読み込まれる直前にAppKernel::registerBundles()
メソッドに追加できます。
<?php
namespace App\EventSubscriber;
use App\Manager\EventManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Twig\Environment;
use Twig\Extension\CoreExtension;
/**
* Class TimeZoneListener
*
* @package App\EventListener
*/
class TimeZoneSubscriber implements EventSubscriberInterface
{
/** @var Environment */
private $environment;
/** @var EventManager */
private $manager;
/** @var string */
private $timezone;
/**
* TimeZoneListener constructor.
*
* @param Environment $environment
* @param EventManager $manager
* @param string $timezone
*/
public function __construct(Environment $environment, EventManager $manager, string $timezone)
{
$this->environment = $environment;
$this->manager = $manager;
$this->timezone = $timezone;
}
/**
* @return array|null
*/
public static function getSubscribedEvents(): ?array
{
return [
KernelEvents::CONTROLLER => 'setTimeZone',
];
}
public function setTimeZone(FilterControllerEvent $filterControllerEvent)
{
if (!$this->environment instanceof Environment) {
return;
}
// decide correct timezone either default or event defined
$event = $this->manager->getActiveEvent();
$timezone = null === $event ? $this->timezone : $event->getTimezone();
/**
* set twig default time zone
*
* @var CoreExtension $core
*/
$core = $this->environment->getExtension('Twig_Extension_Core');
$core->setTimezone($timezone);
return $this->environment;
}
}