例外クラスを外部定義して共通化してみた
Codeignierで開発をしていて、例外処理を書くとき、例外の種類に応じた処理をするために、独自の例外クラスを作りたくなりました。
例)
try{
}catch(UnauthorizedException $e){ //独自
}catch(NotFoundException $e){ //独自
}catch(Exception $e){ //PHPに標準で用意されている例外クラス
}
ところがいい情報が見つからなかったので、「こうしたらできるか?」的なノリで実装したらとりあえず動いたのでメモ。 ※(おかしな記述だったらご指摘いただけるとありがたいです!)
以下の例外クラスをまとめたファイルを追加。 # application/libraries/Api_response.php <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Api_Response extends Exception{ public function __construct($msg, $code){ parent::__construct($msg, $code); } } class UnauthorizedException extends Api_Response{ <= 独自の例外クラスを追加 public function __construct(){ parent::__construct("Unauthorized.", 401); } } class NotFoundException extends Api_Response{ public function __construct(){ parent::__construct("Not found.", 404); } } ↑の例外クラスを使うコントローラ # application/controllers/Account.php require APPPATH.'libraries/Api_Response.php'; <=追加 throw new UnauthorizedException(); <= 適宜throwして、冒頭の例のようにtry - catchで補足
これでコントローラごとに class NotFoundException
を書かずに共通化できました。
この書き方がCodeigniter的によろしいのかどうかは分かりませんが。。。