【问题标题】:What is the best way to apply mutiple time zone?应用多个时区的最佳方法是什么?
【发布时间】:2013-03-11 22:13:37
【问题描述】:

我正在努力在 Codeigniter(2.0) 中应用会话基础时区。

场景:

一旦用户登录系统,我使用 lat/lon 检测时区 ID 并将其设置为会话变量,然后在每个控制器的构造函数中调用 set_timezone()。

例如一个自动加载的帮助文件:

function set_timezone($timeZoneId='')
{
  if($timeZoneId!="")
  {
    date_default_timezone_set($timeZoneId);
    mysql_query("SET SESSION time_zone = '".$timeZoneId."'");
  }
}

我的问题是我不想在每个控制器的构造函数中调用set_timezone()。我想要的是全局调用而不是每个控制器的构造函数。

【问题讨论】:

  • 可能创建一个新库,然后通过 autoload.php 自动加载它?

标签: php codeigniter timezone


【解决方案1】:

您应该创建一个名为MY_Controller 的父控制器,您的所有其他控制器都可以扩展它。在该类的构造函数中,您可以调用set_timezone。使用此解决方案,时区将在所有子控制器中自动设置。

您的MY_Controller 应该存储在application/core 中,并且应该如下所示:

class MY_Controller extends CI_Controller
{
  function __construct()
  {
    parent::__construct();
    $this->set_timezone();
  }

  function set_timezone($timeZoneId='')
  {
    // Your code
  }
}

现在所有其他控制器都应该扩展 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...
}

【讨论】:

    【解决方案2】:

    另一种方式是,

    您可以在库中定义它。您可以创建一个库并在库中定义此函数,然后在应用程序的任何位置调用它。不要忘记在 AutoLoad 中加载库。

    【讨论】:

      【解决方案3】:

      正如 Nikitas 所说,创建一个如下所示的库文件并将库文件包含在 autoload.phpb 中

         class Timezoneconvert
         {
             function set_timezone($timeZoneId='')   {
                  $this->obj =& get_instance();
                  $this->obj->load->database();
                if($timeZoneId!="")
                  date_default_timezone_set($timeZoneId);
                  $this->obj->db->query("SET SESSION time_zone = '".$timeZoneId."'");
                }
          }
         }
      

      在 autoload.php 中

      $autoload['libraries'] = array('Timezoneconvert');
      

      【讨论】:

      • 我认为这不会执行代码。它只会使该功能可供使用。
      • 我有一个使用钩子的解决方案。
      【解决方案4】:

      我有一个使用钩子的解决方案。 1.启用配置中的钩子 2.设置成hooks.php

      class HookMyHandler {
          function post_controller_constructor() {
              $this->ci = & get_instance();
      
      
              //my method name
      
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-05-26
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        • 1970-01-01
        • 2016-12-21
        • 2011-02-26
        • 1970-01-01
        • 2021-06-30
        相关资源
        最近更新 更多