Zend Framework 2 时区设置警告问题的解决

本文介绍了一种在Zend Framework 2中通过配置文件解决PHP时区警告的方法,避免直接修改系统设置。

按照 Zend 官方文档安装了 Zend Framework,启动之后的默认页显示了如下警告:

Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in E:\clbx.cn\module\Application\view\layout\layout.phtml on line 44

Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in E:\clbx.cn\module\Application\view\layout\layout.phtml on line 44
2013 by Zend Technologies Ltd. All rights reserved.

虽然可以通过 php 的设置屏蔽警告,或者直接在 php.ini 文件中设置 date.timezone,又或者在 index.php 文件中添加如下语句:

1 ini_set('date.timezone', 'Asia/Shanghai');

1 date_default_timezone_set('Asia/Shanghai');

不过我是个配置强迫症患者:尽可能的不动系统设置,并且利用配置文件来完成这样的工作,是我的目标。

当然,此类问题优先要找一找有没有现成的解决方案,百度一番,没有结果,还是 google 给力,在 CONFIGURING PHP INI SETTINGS IN ZF2 找到了如下一段代码:
转载请尊重原创、保留相关链接本文来自多宝平台http://www.mbodb.com

点击(此处)折叠或打开

  1. <?php
  2.  namespace PhpSettings;
  3.   
  4.  use Zend\EventManager\Event;
  5.   
  6.  class Module
  7.  {
  8.      /**
  9.       * Configure PHP ini settings on the bootstrap event
  10.       * @param Event $e
  11.       */
  12.      public function onBootstrap(Event $e) {
  13.          $app = $e->getParam('application');
  14.          $config = $app->getConfiguration();
  15.          $phpSettings = $config['phpSettings'];
  16.          if($phpSettings) {
  17.              foreach($phpSettings as $key => $value) {
  18.                  ini_set($key, $value);
  19.              }
  20.          }
  21.      }
  22.   
  23.      /* The getAutoloaderConfig() and getConfig() methods are left out here
  24.         for brevity, as they are completely standard.
  25.       */
  26.  }

并在配置文件中添加了如下设置:

点击(此处)折叠或打开

  1. return array(
  2.      'phpSettings' => array(
  3.          'display_startup_errors' => false,
  4.          'display_errors' => false,
  5.          'max_execution_time' => 60,
  6.          'date.timezone' => 'Europe/London',
  7.          'mbstring.internal_encoding' => 'UTF-8',
  8.      ),
  9.  );

不过上面明确说明,这个只适用于 Zend Framework 2 Beta4,我用的是 Zend Framework 2 2.1.5 正式版,有了一些变化。

首先,这个类的命名空间是 Application,而且其中 onBootstrap 方法已经有了内容。

不管它,先粘过来再说,当然也得讲点规矩,别将代码直接粘到 onBootstrap中,代码如下:

点击(此处)折叠或打开

  1. <?php
  2.  namespace Application;
  3.  
  4.  use Zend\Mvc\ModuleRouteListener;
  5.  use Zend\Mvc\MvcEvent;
  6.  
  7.  class Module
  8.  {
  9.      public function onBootstrap(MvcEvent $e)
  10.      {
  11.          $e->getApplication()->getServiceManager()->get('translator');
  12.          $eventManager = $e->getApplication()->getEventManager();
  13.          $moduleRouteListener = new ModuleRouteListener();
  14.          $moduleRouteListener->attach($eventManager);
  15.          $this->setPhpSettings($e);
  16.      }
  17.  
  18.  
  19.      private function setPhpSettings(MvcEvent $e)
  20.      {
  21.          $config = $e->getApplication()->getConfiguration();
  22.          if (array_key_exists('phpSettings'], $config) && is_array($config['phpSettings'])) {
  23.              foreach ($config['phpSettings'] as $key => $value) {
  24.                  ini_set($key, $value);
  25.              }
  26.          }
  27.      }
  28.  
  29.      public function getConfig()
  30.      {
  31.          return include __DIR__ . '/config/module.config.php';
  32.      }
  33.  
  34.      public function getAutoloaderConfig()
  35.      {
  36.          return array(
  37.              'Zend\Loader\StandardAutoloader' => array(
  38.                  'namespaces' => array(
  39.                      __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
  40.                  ),
  41.              ),
  42.          );
  43.      }
  44.  }

没有配置项放在作者所说的文件里,而是放在了项目根目录下 confit/autoload 的 local.php 文件中(将 local.php.dist 改名为 local.php)。

浏览,问题依旧。

仔细翻看 ZF2 源代码,发现,没有 getConfiguration 方法,多宝取而代之的是 getConfig 方法,修改代码:

点击(此处)折叠或打开

  1. <?php
  2.  namespace Application;
  3.  
  4.  use Zend\Mvc\ModuleRouteListener;
  5.  use Zend\Mvc\MvcEvent;
  6.  
  7.  class Module
  8.  {
  9.      public function onBootstrap(MvcEvent $e)
  10.      {
  11.          $e->getApplication()->getServiceManager()->get('translator');
  12.          $eventManager = $e->getApplication()->getEventManager();
  13.          $moduleRouteListener = new ModuleRouteListener();
  14.          $moduleRouteListener->attach($eventManager);
  15.          $this->setPhpSettings($e);
  16.      }
  17.  
  18.  
  19.      private function setPhpSettings(MvcEvent $e)
  20.      {
  21.          $config = $e->getApplication()->getConfig();
  22.          if ($config['phpSettings']) {
  23.              foreach ($config['phpSettings'] as $key => $value) {
  24.                  ini_set($key, $value);
  25.              }
  26.          }
  27.      }
  28.  
  29.      public function getConfig()
  30.      {
  31.          return include __DIR__ . '/config/module.config.php';
  32.      }
  33.  
  34.      public function getAutoloaderConfig()
  35.      {
  36.          return array(
  37.              'Zend\Loader\StandardAutoloader' => array(
  38.                  'namespaces' => array(
  39.                      __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
  40.                  ),
  41.              ),
  42.          );
  43.      }
  44.  }

浏览,问题解决!

课程设计报告:总体方案设计说明 一、软件开发环境配置 本系统采用C++作为核心编程语言,结合Qt 5.12.7框架进行图形用户界面开发。数据库管理系统选用MySQL,用于存储用户数据与小精灵信息。集成开发环境为Qt Creator,操作系统平台为Windows 10。 二、窗口界面架构设计 系统界面由多个功能模块构成,各模块职责明确,具体如下: 1. 起始界面模块(Widget) 作为应用程序的入口界面,提供初始导航功能。 2. 身份验证模块(Login) 负责处理用户登录与账户注册流程,实现身份认证机制。 3. 游戏主大厅模块(Lobby) 作为用户登录后的核心交互区域,集成各项功能入口。 4. 资源管理模块(BagWidget) 展示用户持有的全部小精灵资产,提供可视化资源管理界面。 5. 精灵详情模块(SpiritInfo) 呈现选定小精灵的完整属性数据与状态信息。 6. 用户名录模块(UserList) 系统内所有注册用户的基本信息列表展示界面。 7. 个人资料模块(UserInfo) 显示当前用户的详细账户资料与历史数据统计。 8. 服务器精灵选择模块(Choose) 对战准备阶段,从服务器可用精灵池中选取参战单位的专用界面。 9. 玩家精灵选择模块(Choose2) 对战准备阶段,从玩家自有精灵库中筛选参战单位的操作界面。 10. 对战演算模块(FightWidget) 实时模拟精灵对战过程,动态呈现战斗动画与状态变化。 11. 对战结算模块(ResultWidget) 对战结束后,系统生成并展示战斗结果报告与数据统计。 各模块通过统一的事件驱动机制实现数据通信与状态同步,确保系统功能的连贯性与数据一致性。界面布局遵循模块化设计原则,采用响应式视觉方案适配不同显示环境。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值