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


    按照 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 找到了如下一段代码:

     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 }

    浏览,问题解决!

  • 相关阅读:
    [转]六款常用的linux C/C++ IDE
    git使用总结
    虚拟机模板信息注入解决方案
    kvm学习小计
    [转]配置 VIM 的 Go 语言开发环境
    [转]20个令人惊叹的桌面Docker容器
    Docker学习小计
    在Windows环境中利用Responder工具窃取NTLMv2哈希
    MFC小型工具通用界面框架CLIST控件+右键菜单功能
    【技术思路】极客时间-左耳听风-程序员攻略开篇
  • 原文地址:https://www.cnblogs.com/matchless/p/3046435.html
Copyright © 2020-2023  润新知