带有Whoops的CodeIgniter 3

时间:2017-11-08 21:33:44

标签: php codeigniter-3 whoops

我无法完全解决CI中发生的任何错误,通过向index.php添加处理程序尽早注册Whoops。

switch (ENVIRONMENT)
{
    case 'development':
        error_reporting(-1);
        ini_set('display_errors', 1);
        error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);

        $whoops = new \Whoops\Run;
        $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler());
        $whoops->register();

        throw new Exception("Whoops exception testing");

        break;

    case 'testing':

        break;

    case 'production':

        break;

    default:

        exit(1);
}

Whoops处理index.php文件中发生的错误,但是当控制器或模型中发生错误时,似乎CI错误处理程序有点在Whoops之前捕获错误。

接下来的尝试是在MY_Controller.php构造中注册Whoops,它可以工作,但只有异常由Whoops处理,一个简单的语法错误,如忘记分号仍由CI错误处理程序处理。将Whoops处理程序实例化到不同的地方有点奇怪。

参考: Codeigniter + Whoops

1 个答案:

答案 0 :(得分:1)

通过执行以下操作,我得到了很好的工作:

  1. 确保在config/config.php

    中启用了挂钩
    $config['enable_hooks'] = true;
    
  2. config/hooks.php

    中添加一个钩子
    $hook['pre_system'][] = array(
      'class'    => 'WhoopsHook',
      'function' => 'bootWhoops',
      'filename' => 'WhoopsHook.php',
      'filepath' => 'hooks',
      'params'   => array()
    );
    
  3. 使用以下代码创建新文件hooks/WhoopsHook.php

    <?php
    class WhoopsHook {
        public function bootWhoops() {
            $whoops = new \Whoops\Run;
            $whoops->pushHandler(new Whoops\Handler\PrettyPageHandler());
            $whoops->register();
        }
    }