제목 | 모델 $this->db 처리 인식문제. | ||
---|---|---|---|
글쓴이 | 아싸리비아 | 작성시각 | 2014/10/20 10:30:17 |
|
|||
코드이그나이터를 접하고 이것저것 테스트 진행하면서. 기초를 다듬고 있는데 막히는데가 발생하네요 ;; 일단 컨트롤러 에서 모델을 불러왔습니다. 모델 메소드상에서 $this->db 없다고 나오네요. 그래서 혹시 커넥트 문제가 있나 해서 $CI =& get_instance(); print_r($CI->db)를 해보았지만 정상적으로 정보가 있어 당황스럽습니다. 그렇다고 $this->db를 선언해서 처리할수도 있겠지만, 참고 소스를 아무리 봐도 그렇게 처리된 사례를 볼수가 없어서 당황스럽네요. 우선 환경은 아래와 같습니다. Codeigniter 2.2.0 + HMVC 5.4 소스는 간단하게 이렇게 처리하였습니다. (DB는 현재 자동 커넥트는 배제 하고 수동 처리를 하도록 하였습니다.) class Testc extends CI_Controller { public function history() { $this->load->model('Bizhistory_model', '', true); $this->Bizhistory_model->historyList(); } } class Bizhistory_model extends CI_Model { function __construct() { parent::__construct(); } public function historyList() { print_r($this->db); } } 흠 HMVC 의 버그인지 참 당황스럽네요. Header, Footer 를 분리하기위한목적으로 HMVC를 사용하고 있는데 순수하게 코드이그나이터만 사용해야할지 고민되네요. -------------------------------------------------------------- 추가적으로.. 혹.. 아무리 예제를 찾아봐도 Controller 에서 Controll를 호출하는 방법은 HMVC 5.4 버전이나, 위젯을 이용해야 하는걸로 알고 있는데. 혹 기본 기능중에 제공되는게 있나요? |
|||
다음글 | 코드이그나이터 괄호 설정 (2) | ||
이전글 | 쇼핑몰에서 파일 업로드 할떄... (5) | ||
들국화
/
2014/10/20 10:45:33 /
추천
0
|
변종원(웅파)
/
2014/10/20 11:55:54 /
추천
0
컨트롤러에서 로딩을 했다고 하시는데 올려주신 소스에선 데이터베이스 로딩하는 부분이 없습니다.
수동로딩한다고 하셨으니 컨트롤러에 아래 구문을 넣어줘야 데이터베이스 로딩이 됩니다. $this->load->database(); |
아싸리비아
/
2014/10/20 13:03:22 /
추천
0
들국화님, 웅파님 답변 갑사합니다.
들국화님 // autoload 를 해야만 $this->db 를 사용가능한건가요 ; 흠.. DB 커넥트부분과 분리를 하려고 하는 의도라. autoload로 database는 배제했던부분인데. 다른 방법을 좀 찾아봐야겠네요 흠.. /------------------------------------------ 웅파님 // 메뉴얼 보고 테스트 진행중인데.. 모델 불러올때 아래처럼 불러올경우 3번째 인자값이 default에 해당되는 db를 자동 로드 하는걸로 알고 있는데. 아닌가요? <span neue,helvetica,arial,sans-serif"="">$this->load->model('Bizhistory_model', '', true); controller에서 $this->load->database(); 후에 해도 처리가 model 에서 $this->db가 않되는거 봐선.. 다른 문제로 보이는데.. 원인을 찾기 어렵네요. 코어부분을 분석해야하는건지.. |
kaido
/
2014/10/20 13:27:05 /
추천
0
얼마전 저도 $this->db 이게 안먹어서 한참 고민 했었는데 |
아싸리비아
/
2014/10/20 14:26:56 /
추천
0
kaido님 답변감사합니다.
혹 저도 그런가 싶어서 파일 모두 열어서 인코딩 체크 확인해보았으나 다 UTF-8으로 정상적이네요.. 흠.. kaido 님 말대로라면 다른 문제로 인해서 발생될수 있는 문제로 생각되어 좀더 꼼꼼하게 체크해봐야할거 같습니다. |
한대승(불의회상)
/
2014/10/20 14:50:46 /
추천
0
autoload에 설정 했을때는 문제가 없나요?
model __construct() 쪽에 $this->load->database() 하셔도 됩니다. class Bizhistory_model extends CI_Model { function __construct() { parent::__construct(); $this->load->database(); } public function historyList() { print_r($this->db); } } |
아싸리비아
/
2014/10/20 15:01:24 /
추천
0
불의화상님 답변감사합니다.
해당 부분도 확인하였으나 해결되지 않았습니다 ㅠㅠ //------------------------------------------------ 전반적으로 소스 뜯어보고 삭제하면서 문제 발생부분을 확인하였습니다. HMVC 새로운 기능으로 인한 버그로 보여지네요 ㅠㅠ; Controller 에서 _remap() 을 이용하여 header, footer를 붙이는 로직이 추가하여 작업하였습니다. public function _remap($method, $params = array()) { if (method_exists($this, $method)) { $commonData = array( 'title' => TITLE, 'isMainPage' => false, 'isSubPage' => true, 'subPage' => $method ); // 벤치마크 자료 하단 표출 $this->output->enable_profiler(TRUE); $this->setHeader(); $this->output->append_output( modules::run('common/header', $commonData) ); call_user_func_array(array($this, $method), $params); $this->output->append_output( modules::run('common/footer', $commonData) ); } else { show_404(); } } 이중에.... modules::run을 하는 순간 $this->db가 인식불가가 되버리네요.. 에구.... 위젯을 사용해야할지 고민이네요... hmvc 5.4 에서 위젯같은 기능이 있다고 해서 위젯을 사용안하고 위방법처럼 했던건데. 흠.. header, footer controller를 호출할수 있는 방법을 좀 찾아봐야될꺼 같네요. 아니면 상속을 이용해서 가공해야 할거 같네요. 들국화님, 웅파님, kaido님, 불의회상님 답변 감사드립니다. |
필요한 곳에서 명시적으로 로딩해 줘야 합니다.
$autoload['libraries'] = array('database')