2013-10-28 70 views
0

我想每次在CodeIgniter中加载一个页面时实例化一个类。CodeIgniter自动加载包

它看起来像/application/config/autoload.php是做这个的地方。那是对的吗?

我加入这行来包装的自动加载:

$autoload['packages'] = array('/application/third_party/Autoload.php'); 

现在我需要这个代码中的每一页上执行,在那里我可以做到这一点?

$bugsnag = new Bugsnag_Client("YOUR-API-KEY-HERE"); 
set_error_handler(array($bugsnag, "errorHandler")); 
set_exception_handler(array($bugsnag, "exceptionHandler")); 

回答

1

那么让我来解释一下你如何做到这一点。
由于您已经自动加载包,现在您需要执行此操作。
在application/core /目录下创建一个MY_Controller。

Class MY_Controller Extends CI_Controller{ 

    public $bugsnag = ''; 
    public function __construct(){ 

    parent::__construct(); 
     $this->bugsnag = new Bugsnag_Client("YOUR-API-KEY-HERE"); 
     set_error_handler(array($bugsnag, "errorHandler")); 
     set_exception_handler(array($bugsnag, "exceptionHandler"));  
    } 
} 

注意$this->bugsnag现在包含该对象。当你需要访问它在任何页面,您可以简单地做这样通过扩展父类

Class Test Extends MY_Controller{ 

    public function __construct(){ 
     parent::__construct(); 
    } 

    public function index(){ 
     echo '<pre>'; 
     print_R($this->bugsnag); 
    } 
} 
0

创建一个MY_Controller &继承你的所有控制器。你可以通过谷歌搜索找到更多关于“MY_Controller”的信息

3

要自动负载(根据CI)一个包,你应该把package path/name以下数组中,喜欢

$autoload['packages'] = array(APPPATH.'third_party', '/usr/local/shared'); 

但它不会自动执行任何代码,但会使您的包无需显式加载即可使用。

为了每次都执行一些代码,您可以将该代码放入您的基本控制器的constructor函数中。另外,您可以将代码放入您的config.php文件中。如果你有一个扩展的基本控制器,如application/core/MY_Controller.php

class MY_Controller extends CI_Controller { 
    // 
} 

然后你可以使用它的构造函数一样

class MY_Controller extends CI_Controller { 
    function __construct() 
{ 
    parent::__construct(); 
    $this->bugsnag = new Bugsnag_Client("YOUR-API-KEY-HERE"); 
      set_error_handler(array($bugsnag, "errorHandler")); 
      set_exception_handler(array($bugsnag, "exceptionHandler")); 
} 
} 

Rest的控制器将使用/延长MY_Controller而不是CI_Controller

但你也可以在这种情况下使用hook(注册自定义异常处理程序),在application/config/hooks.php文件,把下面的代码

$hook['pre_controller'][] = array(
    'class' => 'CustomExceptionHook', 
    'function' => 'SetExceptionHandlers', 
    'filename' => 'CustomExceptionHook.php', 
    'filepath' => 'hooks' 
); 

创建application/hooks/CustomExceptionHook.php文件夹中的一类,像

class CustomExceptionHook 
{ 
    public function SetExceptionHandlers() 
    { 
     // add package path (if not auto-loaded) 
     $this->load->add_package_path(APPPATH.'third_party/package_folder/'); 
     // load package (if not auto-loaded) 
     $this->load->library('Bugsnag_Client'); 

     set_error_handler(array($this->Bugsnag_Client, "errorHandler")); 
     set_exception_handler(array($this->Bugsnag_Client, "exceptionHandler")); 
    } 
} 
0

以下是MY_Controller的一个版本。PHP 这是通过使用作曲家安装BugSnag

使用这种方法的$this->_bugsnag变量暴露给整个CI系统

class MY_Controller extends CI_Controller { 

    // Application Version 
    public $_app_version; 

    // Bugsnag 
    public $_bugsnag = NULL; 

    /** 
    * Constructor 
    */ 
    public function __construct() { 

     parent::__construct(); 

     // Dont print errors to screen 
     ini_set('display_errors', 0); 

     // Load configs 
     $this->load->config('appversion'); 
     $this->load->config('bugsnag'); 
     $this->_app_version = $this->config->item('app_version'); 

     // INIT: bugsnag 
     // https://docs.bugsnag.com/platforms/php/other/configuration-options/ 
     $this->_bugsnag = Bugsnag\Client::make($this->config->item('bugsnagAPIKey')); 
     $this->_bugsnag->setErrorReportingLevel(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED); 
     $this->_bugsnag->setNotifyReleaseStages(['developement', 'testing', 'production']); 
     $this->_bugsnag->setReleaseStage(ENVIRONMENT); 
     $this->_bugsnag->setAppType('API Server'); 
     $this->_bugsnag->setAppVersion($this->_app_version); 
     $this->_bugsnag->setHostname($_SERVER['HTTP_HOST']); 
     $this->_bugsnag->setProjectRoot(realpath(APPPATH)); 
     $this->_bugsnag->setFilters(['password']); 
     Bugsnag\Handler::register($this->_bugsnag); 

     // Load Helpers 

     // Load Libraries 

     // Load Languages 
    } 
} 

您现在可以访问BugSnag方法是这样的。

$this->_bugsnag->leaveBreadcrumb('Hello'); 
$this->_bugsnag->notifyException($e);