Как я могу установить часовой пояс в Symfony 3? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть приложение Symfony 3, развернутое на сервере Ubuntu 14.04.

Когда я выполняю «дата» в командном окне, сервер отвечает мне «Пт 11 мая 10:02:30 CEST 2018" но когда я сбрасываю дату и время в веточку как " {{dump ("now" | date)}} ", ответ "11 мая 2018 04:04" .

Если я добавлю в заголовок функции контроллера (маршрут), "date_default_timezone_set (" Europe /Мадрид ");" работает нормально, но я не хочу копировать эту строку во всех функциях всех контроллеров.

Затем я хочу знать, где я могу установить часовой пояс в качестве конфигурации Symfony или где я могу установить эту команду PHP ( date_default_timezone_set ("Europe / Madrid") ) глобально для всех контроллеров.

Спасибо

[РЕДАКТИРОВАТЬ]

Одним из решений может быть добавление этого кода в заголовок контроллера, но я хочу установить его один, нет во всех контроллерах, службах и т.д ...:

public function __construct(){
    date_default_timezone_set("Europe/Madrid");
}

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Если вы не можете установить его в php.ini или хотите убедиться, что это значение не зависит от целевой среды, проще всего установить его в AppBundle:

class AppBundle extends Bundle
{
    public function boot()
    {
        parent::boot();
        date_default_timezone_set("Europe/Madrid");
    }
}

В качестве альтернативы, если у вас нет AppBundle (или любого другого собственного пакета), вы можете добавить его в метод AppKernel::registerBundles() прямо перед загрузкой пакетов.

0 голосов
/ 05 октября 2018
<?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;
    }
}
...