首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在symfony 3中设置时区?

如何在symfony 3中设置时区?
EN

Stack Overflow用户
提问于 2018-05-11 08:18:39
回答 3查看 18.9K关注 0票数 11

我在Ubuntu14.04服务器上部署了一个symfony 3应用程序。

当我在命令窗口中执行"date"时,服务器响应me "Fri 5-11 10:02:30 CEST 2018",但当我将一个日期时间以形式转储为“{date(”现在“{date”)}“”时,响应是“2018年5月11日: 04:04"。

如果我将控制器函数( "date_default_timezone_set("Europe/Madrid");" )的头放入其中,它可以正常工作,但我不希望在所有控制器的所有函数中复制这一行。

然后,我想知道在哪里可以将Timezone设置为Symfony的配置,或者在哪里可以为所有控制器全局设置这个(date_default_timezone_set("Europe/Madrid"))命令。

谢谢

编辑

一种解决方案可能是将此代码放在控制器的头中,但我希望在所有控制器、服务等中设置一个.

代码语言:javascript
复制
public function __construct(){
    date_default_timezone_set("Europe/Madrid");
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-05 18:56:48

如果您不能在php.ini中设置它,或者您希望确保该值与目标环境无关,那么最简单的方法是在您的AppBundle中设置它:

代码语言:javascript
复制
class AppBundle extends Bundle
{
    public function boot()
    {
        parent::boot();
        date_default_timezone_set("Europe/Madrid");
    }
}

或者,如果您没有AppBundle (或任何其他自己的包),则可以在加载包之前将其添加到AppKernel::registerBundles()方法中。

票数 20
EN

Stack Overflow用户

发布于 2018-10-05 14:42:26

代码语言:javascript
复制
<?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;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2021-03-29 11:07:17

如果定义了所有symfony应用程序的时区,您可以签入app/AppKernel.php /

它将超越默认的php conf时区。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50288020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档