gpt4 book ai didi

php - Symfony2 : Where to set a user defined time zone

转载 作者:可可西里 更新时间:2023-11-01 13:10:26 25 4
gpt4 key购买 nike

我当前项目的一个要求是允许用户为他们的帐户选择一个时区,然后将这个时区用于整个站点中所有与日期/时间相关的功能。

在我看来,我有两个选择:

  • 为每个新的 DateTime 将 DateTimeZone 对象传递给 DateTime 的构造函数
  • 使用 PHP 的 date_default_timezone_set() 设置默认时区

似乎使用 date_default_timezone_set 是可行的方法,但我不确定应该在哪里设置它。因为时区因用户而异,而且整个网站都使用 DateTime,所以我需要将它设置在某个地方,它会影响所有页面。

也许我可以编写一个事件监听器在成功登录后设置它?如果我采用这种方法,它会在所有页面上保持设置还是只在每个页面上设置?

我很想听听其他人会如何处理这个问题。

最佳答案

是的,您可以使用事件监听器, Hook 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()}'");
}
}

关于php - Symfony2 : Where to set a user defined time zone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com