0

モデルとコントローラー内で例外を使用しようとしています。、ディレクトリに、ファイル'CustomException1.php'および'CustomException2.php'にいくつかの例外クラスを持つapplicationディレクトリを作成しました。Exceptions

私はで定義MY_Controllerしましたapplication/core

class MY_Controller extends CI_Controller {

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

        // include Exception files
        require_once(APPPATH . 'Exceptions/CustomException1.php');
        require_once(APPPATH . 'Exceptions/CustomException2.php');
    }

}

私のコントローラーではTest

class Test extends MY_Controller {
   public function index() {
      try {
         throw new CustomException1('This is a custom exception');
      } catch (CustomException1 $e) {
         $this->output->set_status_header('500');
         echo $e->message;
      }
}

これで、Exceptionクラスを定義するすべてのファイルが必要になるため、これが機能することを期待しますが、それでも次のようなエラーが発生します。

Class CustomException1 not found on line xx

4

2 に答える 2

0
throw new CustomException1('This is a custom exception');

そしてキャッチ (CustomException $e)

TBH、これはタイプミスのように見えます。スローされた例外CustomException1CustomException

于 2013-02-04T20:12:50.187 に答える
0

なんらかの理由で、Exceptions ディレクトリのファイルを含めることは CI では機能しません。librariesCIはロード時にライブラリをインスタンス化しようとするため、それらをディレクトリに配置して使用してロードすること$this->load->library()もできませんでした。もちろん、これは望ましくありませんでした。

exceptions私はそれらを内のディレクトリに入れ、 を使用してhelpersロードしました。MY_Controller$this->load->helper('Exceptions/CustomException');

ヘルパーをロードするとき、CI はパス全体を小文字に変換し、ファイル名の末尾に追加することに注意することが重要です_helper。そのため、サーバー上の例外クラスの正確なパスは次のようになります。

APPPATH . 'helpers/exceptions/customexception_helper.php'

これは私の変更された基本クラス コントローラーです。

class MY_Controller extends CI_Controller {

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

        $this->load->helper("Exceptions/CustomException1.php");
        // includes file APPPATH . 'helpers/exceptions/customexception1_helper.php'

        $this->load->helper("Exceptions/CustomException2.php");
        // includes file APPPATH . 'helpers/exceptions/customexception2_helper.php'
    }
}

を使用してこのように含めるMY_Controllerと、これらの例外を で再ロードする必要なく、モデルでも使用できますMY_Model

PS - 私はこのソリューションに完全に満足しているわけではありません。少しハックのように思えますが、これが例外を CodeIgniter に統合する唯一の方法かもしれません。

于 2013-02-05T07:19:22.307 に答える