제목 | CI에서 exception(예외처리) 방법이 궁금합니다.. | ||
---|---|---|---|
글쓴이 | 0년차 | 작성시각 | 2013/10/02 11:04:25 |
|
|||
컨트롤러 코드 class Test extends CI_Controller{
public function __construct()
{
parent::__construct();
$this->load->model('test_model');
}
public function index()
{
$this->load->view('test_view');
}
public function throw_exception()
{
echo 'Test::throw_exception()<br/>';
throw new Exception('errornadda');
}
public function model_exception_test()
{
echo 'Test::model_exception_test()<br/>';
try
{
$this->test_model->throw_exception();
}
catch( Exception $e )
{
log_message( 'error', $e->getMessage() );
}
}
public function controller_exception_test()
{
echo 'Test::controller_exception_test()<br/>';
try
{
$this->throw_exception();
}
catch( Exception $e )
{
log_message( 'error', $e->getMessage() );
}
}
}
모델 코드 class Test_Model extends CI_Model{
public function __construct(){
parent::__construct();
}
public function throw_exception(){
echo 'Test_Model::throw_exception()<br/>';
throw new Exception('errornadda');
}
}
어떤 사이트에서 CI는 모델에서 예외처리를 지원하지 않는다는 내용을 줏어듣고서는.. 이런방식으로 예러처리 코드를 테스트 코드로 짜봤는데.. 에러도 나지 않고 캐치문도 수행하지 않는 것 같습니다.. CI에서는 트라이캐치를 적용시킬 때 어떤 특정 조건이 만족해야하는건지.. 아니면 제가 잘못 쓰고 있는건지 궁금합니다.. |
|||
다음글 | [질문] form submit 할 때, URI segm... (3) | ||
이전글 | pagenation관련 질문 (3) | ||
변종원(웅파)
/
2013/10/02 13:17:27 /
추천
0
|
Artz
/
2013/10/02 13:25:47 /
추천
0
코어에서 따로 처리하는 부분이 있는지 긴가민가하여
컨트롤러 및 모델에서 throw하여 테스트를 진행해봤는데, Catch문 내부가 정상적으로 실행되고 있습니다. log_message() 설정 문제가 아닐까 생각되는데, log_message() 대신 echo로 화면 출력 한번 해보세요. |
0년차
/
2013/10/02 13:55:46 /
추천
0
아..Artz님 말씀대로 echo로 처리하니 제대로 보입니다..
트라이 캐치가 제대로 구현되는걸 확인하고 예전에 트라이캐치가 안먹었던코드가 DB관련 코드여서 간단하게 SQL 오류를 내고 트라이캐치를 하니 오류를 예외처리 하지 못하는 것 같은데.. SQL오류는 CI의 트라이캐치로 오류영역을 예외처리 할 수 없는걸까요? 제가 사용한 코드는 아래와 같은데요..컨트롤러의 두 함수 모두 같은 증상이 발생하네요.. 토론이 아닌 질문만 하는 초보자라 죄송합니다..; 검색을 해봐도 역량이 부족해서 그런건지..제가 원하는 답인지 아닌지 애매모호 하네요.. 컨트롤러 public function sql_exception_test()
{
echo 'Test::sql_exception_test()<br/>';
try
{
$this->test_model->sql_throw_exception();
}
catch (Exception $e)
{
echo $e->getMessage();
}
}
public function sql_exception_test2(){
echo 'Test::sql_exception_test()<br/>';
$this->test_model->sql_throw_exception();
}
모델 public function sql_throw_exception(){
echo 'Test_Model::sql_throw_exception()<br/>';
$insert_sql = 'INSERT INTO Test01T';
$this->db->query( $insert_sql );
}
|
Artz
/
2013/10/02 18:25:27 /
추천
0
CI 소스를 다 분석해본게 아니라 잘은 모르겠지만,
CI의 데이터베이스 클래스 사용시에, 코어 한켠에서 오류 처리를 해버리는 것 같습니다. 그래서 원하시는 결과를 만들어내긴 힘들것 같네요. 쿼리 오류에 대한 처리를 따로 하고 싶다면, 직접 DB 라이브러리나 함수를 만들어서 사용하셔야겠네요. |
변종원(웅파)
/
2013/10/02 19:15:20 /
추천
0
db 예외처리 부분 제가 올린 첫번째 링크에 있습니다.
|
http://cikorea.net/search/index/q/exception