TIP게시판

제목 컨트롤러에서 컨트롤러 부르기
글쓴이 한대승(불의회상) 작성시각 2012/11/29 09:52:32
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 20688   RSS
한대승(불의회상)
제목이 거창 하네요.

포럼에 자주 올라오는 질문중에 "CI에서는 모델이나 뷰처럼 컨트롤러를 땡겨 올 수 없나요?" 라는 질문이 있습니다.

그 때마다 

"안됩니다."
"왜 그렇게 하려고 하시나요?"
"컨트롤러는 URL로만 접근이 가능 합니다."

라는 답변으로 마무리 짓곤 했었죠.

어제 웅파님 문상 간 자리에서 밥 한 술하고 술 한 잔하고 할 얘기가 없는 상황에서 CI를 처음 접하고 허둥대던 이야기를 하던 중 불쑥 그 이야기가 튀어 나왔습니다.

그런데 질문이 약간 달랐어요.

"왜 CI는 컨트롤러를 확장 할 수가 없는거지?"

어제 저녁엔 술도 들어간 상황이라 "그래서 CI하던 사람들이 kohana 나 yii 같은 프레임워크로 옮기는거야" 라는 답변으로 마무리 했는데 잠자리에 누워서도 그 질문이 계속 메아리 치는 겁니다.

PHP 5.3에서는 Jquery 처럼 익명 함수도 지원해 주고 namespace도 지원해 주고 5.4, 6.0 의 기능들을 살펴보면 OOP 지원이 java 뺨치는데...

라는 동기가 있었습니다.

썰이 길었네요.
--------------

위 질문들을 다시 해석해 보면 "CI는 OOP 프레임워크 인데 왜 상속과 확장이 안되는거지?" 라는 질문으로 바뀝니다.

안되는게 어딨어! PHP도 이제 훌륭한 OOP 언어 인데...

아래 코드를 작성해서 집어 넣으시고 컨트롤러를 호출해 보세요.

controllers/test.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once APPPATH . 'controllers/welcome.php';
class Test extends Welcome {}
test 컨트롤러는 welcome 컨트롤러를 상속 받았습니다.

http://mysite.com/test

하시면 확인 하실 수 있을거에요.

ㅎㅎㅎㅎㅎ 해놓고 보니 정말 간단한 거였네요.
고정관념 참 무섭죠..

당연한 소리지만 CI모델도 같은 방법으로 상속과 확장이 가능 합니다.

즐거운 코딩 되세요~~ ^^
 다음글 특정 컨트롤러에서 php session 사용하기 (2)
 이전글 게시판 등 검색시. (2)

댓글

헛발이2 / 2012/11/29 10:24:41 / 추천 0
오~ 그렇군요~
저도 한번 해 봐야 겠네요 ...
milosz / 2012/11/29 10:38:26 / 추천 0
 저도 의아한 부분이었고 오래 생각해봤던 부분인데요.
 
코드이그나이터에서의 MVC는 순수 객체지향 구현에 방점을 두기보다 비지니스 로직의 구현에 더 중점을 두는 것 같습니다.
 
만약 상속을 통해 동일한 기능을 구현해야 한다면 해당 부분은 컨트롤러로 보기보다는 라이브러리로 구현해두고 각 컨트롤러에서 로드해 사용하는 식으로 말이죠.

그냥 제 생각입니다. 주절주절 ㅎ
라마야나 / 2013/11/08 12:23:09 / 추천 0
내용이 제목가 상이해서 순간 ;

제목만으로 보자면 milosz 님의 말씀 처럼 라이브러리로 구현을 해야 할 것 같고.
내용으로 보자면 당연시 상속해서 사용하는 건 가능 하죠 OOP인데. ^^.

푸하라 / 2014/01/08 11:53:35 / 추천 0
음 시간이 한참 지난 내용같은데.....

상속이라는 방법을 이용한 컨트롤러 끌어오기를 하신 내용으로 작업을 하셨네요...

저도 오늘 처음 으로 찾다가 발견하여서 이걸 읽었는데....
상속해서 하는방법은 oop해보신 분들이라면 당연 먼저 생각하셨을 것 같고 그런 문제가 아니라 
다른 접근이 필요하여 다른 컨트롤러의 기능을 사용 하고 싶어 하는것 아닐까 합니다.

예로 들자면 로그인 해야만 글을 읽을 수 있도록 개발 한다면 ... 
라이브러리 개발 하고 뷰까지 개발을 완료했는데...

굳이 로그인을 해야 하는 뷰가 필요하다면 redirect를 이용한 사이트 이동보다는 컨트롤 내부에서 자동으로 다른 컨트롤러를 로딩하여 불러 오고 싶을 수 있을것 같습니다. 이럴때 굳이 리다이렉트를 쓰느냐 아니면 컨트롤러를 불러와서 그냥 그페이지에서 출력하느냐?
정도의 차이 일꺼 같습니다. 

마냥 상속으로 해결 할 수있는 문제는 아닌듯 하네요.....

 
한대승(불의회상) / 2014/01/08 12:18:32 / 추천 0
푸하라// 그렇군요. 컨트롤러의 최종 결과물을 원할수도 있겠네요. 모듈처럼 말이죠.