| 제목 | Model호출 에러 | ||
|---|---|---|---|
| 글쓴이 | 유승민 | 작성시각 | 2013/04/20 17:54:56 | 
|  | |||
| 안녕하세요 얼마 전에 CodeIgniter를 접하고 이용해서 홈페이지를 만들어보고있는데 메인컨트롤러에서 Model을 한번 호출하고 select 값이 있으면 redirect 해서 서브컨트롤러로 이동하게 해놨는데 서브컨트롤러에서 $this->load->model('notice'); 이렇게 모델을 호출 하기만 하면 Fatal error: Cannot redeclare class Notice in Unknown on line 0 이런 에러가 발생합니다. 왜그럴까요! ....? redirect('http://주소/notice', 'location'); 이렇게 메인컨트롤러에서 리다이렉트 시켜주구요... 서브컨트롤러에서는 $this->load->model('notice'); $this->load->view('notice/notice_L'); //tmpPage이게 답니다.. 모델 호출부분을 주석처리하면 잘 되고요... 모델 호출부분을 public function __construct()  {   parent::__construct();   // 생성자 코드에 기능추가  } 여기로 옮겨도 똑같은 에러가 발생하구요.. ㅠ | |||
| 다음글 | Pagination Class를 사용하는데요 현제 페이... (1) | ||
| 이전글 | sms발송 모듈의 CI적용 방법 문의 드립니다. (1) | ||
| 
                                꾸숑
                                /
                                2013/04/20 18:39:10 /
                                추천
                                0
                             | 
| 
                                유승민
                                /
                                2013/04/21 00:12:58 /
                                추천
                                0
                             
                                꾸숑 // 모델을 construct(); 부분으로 옮겨서 호출해도 동일한 에러가 발생합니다... ㅜㅜ 모델 호출 하는 부분에서 저 에러가 발생하더라구요... 저부분 주석처리하고 뷰 호출만 하면 정상 작동하구요.. | 
| 
                                꾸숑
                                /
                                2013/04/21 00:16:45 /
                                추천
                                0
                             
                                유승민// 그러면 $this->load->model('notice'); 이게 문제 인것 같네요.. 모델쪽 살펴 보세요 분명 뭔가 잘못된것이 있을것 같네요.. 모델 소스 올려 보세요... 콘트롤러도 같이요 함 같이 고민해 보자고요.. 에러 메세지 번역하면 아래와 같네요.. 치명적인 오류 : 라인 0에 알 수없는 notice클래스를 다시 선언 할 수 없습니다 | 
| 
                                유승민
                                /
                                2013/04/21 11:40:38 /
                                추천
                                0
                             
                                꾸숑 // //컨틀롤러 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Notice extends CI_Controller {  public function __construct()  {   parent::__construct();   // 생성자 코드에 기능추가  }  public function index()  {   // 로그인 성공 시 띄워줄 화면   $this->load->model('notice');   $this->load->view('notice/notice_L'); //tmpPage  } } //모델 <?php  class Notice extends CI_Model {  function __construct()  {   // Call the Model constructor   parent::__construct();   $this->load->database();  }  function select(){   $sql = 'SELECT * FROM NOTICE';   return $this->db->query($sql);  } } ?> | 
| 
                                유승민
                                /
                                2013/04/21 13:44:21 /
                                추천
                                0
                             
                                 risa // 바꿔도 동일한 에러가 발생하네요 ㅜ | 
| 
                                risa
                                /
                                2013/04/21 15:00:36 /
                                추천
                                0
                             
                                 베이스 샘플 (2.x 이상 버젼) 
// test.php
<?  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Test extends CI_Controller {
 function Test() {
  parent::__construct();
  $this->load->database();
  $this->load->model('test_model');
  }
 function index(){
   $return_data = $this->test_model->select();
   print_r($return_data);
 }
}
?>
//test_model.php
<?
class Test_model extends CI_Model {
 function __construct(){
  parent::__construct();
 } 
 function select(){
  $query ="select * from test";
  return $this->db->query($query)->result_array();
 }
}         
?>
다시 한번 체크해 보세요. | 
| 
                                유승민
                                /
                                2013/04/21 15:39:00 /
                                추천
                                0
                             
                                 risa // <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Notice extends CI_Controller {  public function __construct()  {   parent::__construct();   // 생성자 코드에 기능추가   $this->load->database();   $this->load->model('notice');  }  public function index()  {   //로그인 성공 시 띄워줄 화면   $retrun_db_data = $this->notice->select();   print_r($retrun_db_data);   //$this->load->view('notice/notice_L'); //tmpPage  } } <?php  class Notice extends CI_Model {  function __construct()  {   // Call the Model constructor   parent::__construct();  }  function select(){   $sql = 'SELECT * FROM NOTICE';   return $this->db->query($sql)->result_array();  } } ?> 동일한 에러 발생합니다 ㅜ | 
| 
                                risa
                                /
                                2013/04/21 15:51:26 /
                                추천
                                0
                             
                                 컨트롤러와 모델명을 같게 만드신것 아닌가요? 컨트롤러 파일명과 모델 파일명은 달라야 합니다. 문법적으로 보면 notice 라는 객체는 이미 CI 컨트롤러 라는 슈퍼클래스를 상속 받았는데 다시 notice 에 CI 모델 슈퍼클래스를 상속 시킬려고 한것입니다. 말로 풀면 부모가 이미 있는데 다른 부모가 유전자를 나눠주겠다는 이야기? 
//notice.php   컨트롤러
class Notice extends CI_Controller {
//notice.php 모델
class Notice extends CI_Model { | 
| 
                                유승민
                                /
                                2013/04/21 17:21:11 /
                                추천
                                0
                             
                                 risa // 감사합니다 ㅜㅜㅜㅜㅜ 멍청돋았네요 ㅜ | 
| 
                                꾸숑
                                /
                                2013/04/21 22:01:00 /
                                추천
                                0
                             
                                유승민// 축하드려요 해결 하셨네요.. 전 오늘 CI스터디가 있어서 빠른 답변 못드렸네요 ^^ | 
| 
                                유승민
                                /
                                2013/04/24 09:52:20 /
                                추천
                                0
                             
                                꾸숑 // 꾸숑님도 감사합니다! | 
콘트롤러에서는 아래 형태로 해야 하지 않을까 생각되네요..
$this->load->model('모델명');//먼저 parent::__construct(); 에서 모델을 로드한후에
//컨트롤러 함수에서 아래 형태로...
function 컨트롤러함수명(){
$data = $this->모델명->모델함수명();
$this->load->view('notice/notice_L',$data);
}
전체 소스를 올려 주시면 테스트 후에 정확한 답변을 드릴수 있을것 같습니다.
즐거운 휴일 되세요..