0

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"));
4

4 に答える 4

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"));
}
}

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"));
    }
}
于 2013-10-28T06:51:08.423 に答える
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);
    }
}
于 2013-10-28T06:47:33.873 に答える
0

MY_Controller を作成し、それからすべてのコントローラーを継承します。これについて詳しくは、「MY_Controller」をグーグルで検索してください。

于 2013-10-28T06:22:26.733 に答える