我正在努力在 Codeigniter(2.0) 中应用基于 session 的时区。
场景:
用户登录系统后,我使用纬度/经度来检测时区 ID 并将其设置为 session 变量,然后在每个 Controller 的构造函数中调用 set_timezone() 。
例如自动加载的帮助程序文件:
function set_timezone($timeZoneId='')
{
if($timeZoneId!="")
{
date_default_timezone_set($timeZoneId);
mysql_query("SET SESSION time_zone = '".$timeZoneId."'");
}
}
我的问题是我不想在每个 Controller 的构造函数中调用set_timezone()
。我想要的是全局调用而不是每个 Controller 的构造函数。
最佳答案
您应该创建一个名为 MY_Controller
的父 Controller 所有其他 Controller 都可以扩展。在该类的构造函数中,您可以调用set_timezone
。通过此解决方案,将在所有子 Controller 中自动设置时区。
您的MY_Controller
应存储在application/core
中,并且应如下所示:
class MY_Controller extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->set_timezone();
}
function set_timezone($timeZoneId='')
{
// Your code
}
}
现在您的所有其他 Controller 都应该扩展 MY_Controller
而不是 CI_Controller
。例如:
class WelcomeController extends MY_Controller
{
function __construct()
{
// This will call the constructor of MY_Controller,
// which in turn sets the timezone:
parent::__construct();
}
// Rest of your functions...
}
关于php - 应用多个时区的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15563845/