CI 묻고 답하기

제목 CI에서 exception(예외처리) 방법이 궁금합니다..
글쓴이 0년차 작성시각 2013/10/02 11:04:25
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 19904   RSS
 컨트롤러 코드

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 예외처리 부분 제가 올린 첫번째 링크에 있습니다.