Intereting Posts
Изменение CSS на основе строкового запроса PHP Карты Google и как передать переменную с php-страницы на другую, если эта страница php не включена Библиотека PHP для генерации файлов электронной почты EML? Как я могу отправлять данные GET на несколько URL одновременно с помощью cURL? PHP: массив для самостоятельной привязки Создание списка архивов для блога в Laravel Необлученное сообщение об ошибке «PDOException» «недопустимое имя источника данных» Как удалить имя действия из url в cakephp? Laravel Auth: попытка () не будет продолжаться. Строгий стандарт erro в загрузке файлов TokenMismatchException в строке VerifyCsrfToken.php 53: (браузер Firefox) в laravel 5.1? Как очистить кештекст php без перезапуска Apache или изменить домен? PHP и MySQL: показать SUM о чем-то, классифицированном по отдельным категориям Собирать данные из MySQL с помощью PHP в реальном времени? Zend Framework 2 – Doctrine 2 – Как использовать GeoPointFields

Symfony2: Где установить часовой пояс, определенный пользователем

Одно из моих требований к моему текущему проекту – позволить пользователю выбрать часовой пояс для своей учетной записи, а затем использовать этот часовой пояс для всех связанных с датой и временем функций на всем сайте.

То, как я это вижу, у меня есть два варианта:

  • Передайте объект DateTimeZone в конструктор DateTime для каждого нового DateTime
  • Установите часовой пояс по умолчанию с помощью PHP date_default_timezone_set()

Похоже, использование date_default_timezone_set – это путь, но я не уверен, где именно я должен его установить. Поскольку часовой пояс будет отличаться от пользователя к пользователю, а DateTime используются по всему сайту, мне нужно установить его где-нибудь, чтобы он затронул все страницы.

Может быть, я могу написать прослушиватель событий, который устанавливает его после успешного входа в систему? Если я возьму этот подход, он останется установленным на всех страницах или будет установлен только для каждой страницы?

Мне бы хотелось услышать, как к этому подходят другие.

Solutions Collecting From Web of "Symfony2: Где установить часовой пояс, определенный пользователем"

Да, вы можете использовать прослушиватель событий, подключаясь к событию kernel.request .

Вот слушатель из одного из моих проектов:

 <?php namespace Vendor\Bundle\AppBundle\Listener; use Symfony\Component\Security\Core\SecurityContextInterface; use Doctrine\DBAL\Connection; use JMS\DiExtraBundle\Annotation\Service; use JMS\DiExtraBundle\Annotation\Observe; use JMS\DiExtraBundle\Annotation\InjectParams; use JMS\DiExtraBundle\Annotation\Inject; /** * @Service */ class TimezoneListener { /** * @var \Symfony\Component\Security\Core\SecurityContextInterface */ private $securityContext; /** * @var \Doctrine\DBAL\Connection */ private $connection; /** * @InjectParams({ * "securityContext" = @Inject("security.context"), * "connection" = @Inject("database_connection") * }) * * @param \Symfony\Component\Security\Core\SecurityContextInterface $securityContext * @param \Doctrine\DBAL\Connection $connection */ public function __construct(SecurityContextInterface $securityContext, Connection $connection) { $this->securityContext = $securityContext; $this->connection = $connection; } /** * @Observe("kernel.request") */ public function onKernelRequest() { if (!$this->securityContext->isGranted('ROLE_USER')) { return; } $user = $this->securityContext->getToken()->getUser(); if (!$user->getTimezone()) { return; } date_default_timezone_set($user->getTimezone()); $this->connection->query("SET timezone TO '{$user->getTimezone()}'"); } }