CI 묻고 답하기

제목 모델에서 모델 가져오기
글쓴이 초원을달리는유부남 작성시각 2010/01/04 15:41:21
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 25825   RSS

안녕하세요. 맨날 질문만 하는 유부남입니다.
본론으로 들어가서...

공통의 레이아웃을 만들었답니다. 레이아웃은 모델로 만들었어요.
모델로 만든 이유는, 데이타베이스 연동도 해야 하고, 아래와 같이 템플릿도 불러야 했기 때문이며,
각 페이지의 컨트롤러를 만드는 사람이, 레이아웃에 대한 생각을 할 필요가 없게 만들어야 했기 때문이지요.
컨트롤러에서는 아래처럼 불러오기만 하면, layout 모델의 header과 footer의 로직을 알 필요가 없게 하는것이었지요.
 

$this->layout->header();
$this->load->view('detail');
$this->layout->footer();

문제는 layout 를 모델로 쓴 것에서 발생했습니다.
일반적인 모델에서는 다른 모델을 불러 올 필요가 없지만, layout는 다른 모델을 빌려다 써야 하는 얘인거죠.
컨트롤러로 쓰게 되면, 코드처럼 다른 컨트롤러에서 상속하여 사용할 수 없잖아요.

그래서 현재 상항은 layout 모델에서는 다른 모델을 불러와야 하는데,
하지만, 프레임워크에서는 모델의 의존성을 인정할 수 없는 상황이라 못 불러오게 하는것 같아요.
좋은 방법이 없을까요?

Demo 모델 클래스
class Demo extends Model {

    function Demo()
    {
        parent::Model();
    }

    function img_src($id)
    {
        return 'img/img_' . $id . '.jpg';
    }
}

Layout 모델 클래스
class Layout extends Model {

    function Layout()
    {
        parent::Model();
    }

    function header()
    {
        $this->load->model('demo'); // 이부분

        $data = array();
        $data['img_src'] = $this->demo->img_src(3); // 이부분

        $this->load->view('layout/header', $data);
    }

    function footer()
    {
        $data = array();
        $this->load->view('layout/footer', $data);
    }

}

설명이 부족한 부분은 알려주시면, 좀 더 추가하여 코멘트를 남기겠습니다.
 다음글 $_POST데이터를 다시 VIEW에 보낼때.. (3)
 이전글 CI 세상님 질문 하나 드려도 될까요? (1)

댓글

초원을달리는유부남 / 2010/01/04 15:50:59 / 추천 0

저렇게 공유되는 부분을 helper로 빼서 쓰면 좋을 수도 있지만,
이미지 경로에 대한 정책을 helper로 빼서 쓰기에는 뭔가 분산된 듯한 느낌이 드는것 같아서요.

마냐 / 2010/01/04 16:05:43 / 추천 0
초원을달리는유부남 / 2010/01/04 17:58:08 / 추천 0
앗~~ 이런건 어떤 검색어로 검색해야 될지.. ㅋㅋㅋ

이렇게 쓰는방법은 helper와 같은 곳에서 쓰는 방법으로 제공된거라 쓰면 좋지 않을 거라고 생각했었는데,
그건 또 아닌가 보군요~ ^^

다른 해법이 나오기 전까진 이걸로 사용해야겠네요.
감사합니다.
초원을달리는유부남 / 2010/01/04 18:17:17 / 추천 0
테스트 해본 결과 조금 고민은 더 해봐야 할 것 같네요. ㅠㅠ
변종원(웅파) / 2010/01/04 18:56:16 / 추천 0
^^
검색어 "다른 모델"
소울펨 / 2010/01/05 17:12:20 / 추천 0
모델에서 뷰를 사용 하기보단 데이트 처리용도가 편할듯 싶어요 차라리 controler를 만들어서 다른 컨트롤러에서 호출해주는게 좋을듯 싶네요. 아니면 공통 라이브러리로 뽑으셔도 될듯싶어요
정확한 요인은 모르지만 모델에서 모델을 호출하였을때 이상 현상이 발생했던적이 있습니다.
SADBLUE / 2011/02/08 14:11:25 / 추천 0
저 같은 경우는 model을 MY_Model로 확장하면서 기본적으로 get_instance를 갖는 변수를 선언해 둡니다.
그리고 모델 내부에서 다른 모델을 불러와야 하는 경우에
controller변수를 통해 load를 해서 $this->oController->model_name 이런식으로 참조를 했었습니다.