CI 묻고 답하기

제목 CI3 예외처리문의드립니다.
카테고리 CI 2, 3
글쓴이 봉이김선달 작성시각 2020/02/28 00:23:39
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 14001   RSS

안녕하세요. CI3를 사용중이며, 예외처리에 대해 궁금해서 문의드립니다.

try{}catch{} 구문을 통해 예외를 처리하려고 합니다.

if else 구문을 통해 model에서 넘어온값이 FALSE이거나 null이면 else문을 수행하도록 구현하고 있습니다.

즉, else의 경우 데이터값이 없는경우를 처리하는데 sql 오류나 기타 문제 발생시 catch문으로 넘겨서 에러를 처리하고 있습니다.

문제는 catch문 실행시 view 화면을 실행해서 사용자에게 오류가 발생했다는 것을 알려야 하는데 catch문이 오류를 출력해버려서

해결방안을 문의드리고자 합니다.

 

아래 코드에서 try... catch 구문을 좀더 아름답게(?) 사용하는 방법이 있는지도 궁금하며, controller의 모든 함수(constructor 포함) try catach 문을 지정하는것도 올바른 방법인지도 문의드립니다.

 

고수님들의 많은 지도편달 부탁드립니다. ㅜㅜ

 

샘플코드는 아래와 같습니다.

 

//controller

class Book extends MY_Controller {

    function __construct(){

        try{

            parent::__construct();

            $this->load->model('book_model');

        }catch(Exception $e){

           $this->load->view('error_page'); //에러페이지 view로 보여주기

        }

    } // construct


    function index(){

        try{

            $this->load->view('index;); //index view 보여주기

        }catch(Exception $e){

           //do error handling

        }

    } //index



    function add(){

         try {

              if($this->input->post('submit')){

                 $this->db->trans_begin();   //트랜잭션 시작

                 $data= { 'name' => $this->input->post('name') }

                  $result = $this->my_model->add($data);



                  if( $result ){

                        $this->db->trans_commit();   //트랜잭션 commit

                       $this->load->view('sucess_page'); //success_page view 보여주기

                  }else{

                     $this->db->trans_rollback(); //트랜잭션 rollback

                      $this->load->view('fail_page'); //fail_page view 보여주기

                  }

                }else{

                   $this->load->view('add_page'); //add_page view 보여주기

               }

        }catch(Exception $e){

           //do error handling

        }

    } // add

} // function


//model
class Book_model extends CI_Model{

   function add($data){

      $this->db->insert('book',$data);

      return $this->db->insert_id();

   }

}
태그 예외처리,try catch
 다음글 도메인에서 컨트롤러에 접근하는 방법 문의 (3)
 이전글 ftp업로드에서 delete_file에 대해 문의드립니... (4)

댓글

포포탄 / 2020/02/28 15:48:44 / 추천 0

catch 문이 오류를 출력하는게 아니고 php_ini 설정때문에 오류를 출력하는 것 아닌가 싶네요.

하기 함수 적용하시고, 에러메세지는 Exception 객체의 메세지를 view에 전달하여 출력하시는게 좋을 것 같습니다.

error_reporting(~E_ALL);
ini_set('display_errors',0);
봉이김선달 / 2020/02/28 17:12:45 / 추천 0
전체 함수를 try catch로 감싸는 코딩스타일은 어떤가요?
엽토군 / 2020/02/29 14:16:29 / 추천 0
그렇게 하지 마시고, MY_Exceptions 확장을 만들어서 원하시는 대로 오버라이딩 하세요. http://www.ciboard.co.kr/user_guide/kr/general/core_classes.html