CI 코드

제목 컨트롤러에서 컨트롤러 사용
글쓴이 한대승(불의회상) 작성시각 2014/11/20 11:07:15
댓글 : 10 추천 : 2 스크랩 : 2 조회수 : 19039   RSS
한대승(불의회상)
CI의 치명적인 단점으로 언급 되는 컨트롤러에서 컨트롤러를 재활용(또는 호출) 하지 못하는 문제를 해결 하기 위한 헬퍼 입니다.

1. 설치 방법
  • 첨부된 load_controller_helper.zip 을 다운 받습니다.
  • 압축을 풉니다.
  • load_controller_helper.php 를 application/helpers 에 복사 합니다.
2. 사용 방법
 

class Welcome extends CI_Controller {
	public function index()
	{

		$this->load->helper('load_controller'); // 헬퍼 로드

		// http:// myweb.co.kr/pages
		$page= load_controller('pages'); // 컨트롤러 로드
		$page->index(); // 메소드 호출

		// http:// myweb.co.kr/modules/common
		$common = load_controller('modules/common'); // 컨트롤러 로드
		$common->index(); // 메소드 호출
	}
}


 
첨부파일 load_controller_helper.zip (755 Bytes)
 다음글 CI용 카산드라DB CQL 드라이버 (2)
 이전글 Template 엔진 (3)

댓글

변종원(웅파) / 2014/11/20 14:53:53 / 추천 0
good job!!!!
코드이그 / 2014/11/21 12:12:01 / 추천 0
헐.... 무지 좋은정보 감사드립니다
들국화 / 2014/11/21 15:14:31 / 추천 0
yes
변종원(웅파) / 2014/11/21 18:11:43 / 추천 0
땡유~~~ ^^
minjongi / 2014/11/25 10:08:30 / 추천 0
딱 고민하고 있었는데 너무 좋은자료 감사합니다~
그런데 한가지 궁금한점이 있는데 여쭤보겠습니다
$class_file = count($class_info) > 0 ? implode('/', array_merge($class_info, (array) $class_name)) : $class_name;
$class_file = realpath(APPPATH . 'controllers/' . $class_file . '.php');
$class_file = $class_file != NULL ? $class_file : realpath(APPPATH . 'controllers/' . strtolower($class_file) . '.php');
실제 사용하려다 보니 이 부분에서 파일명을 소문자인데 Board 이런식으로 파라미터를 넘기면 못찾아서 확인을 해보니
첫번째 realpath 에서는 대소구분으로 못찾고, 두번째 realpath 에서는 첫번째 realpath 에서 리턴한 false 를 파일명으로 사용하여
무조건 false를 리턴하여 의미가 없는것으로 보이는데 맞는지요?
아니면 혹시 어떤 의미가 있는것인지 궁금합니다^^;
너무 좋은 자료 올려주셨는데 긴 질문을 드려 죄송합니다^^;;
한대승(불의회상) / 2014/11/25 11:42:23 / 추천 0
minjongi// 파일명 대소문자 구별 안하는 Windows에서 테스트를 하니 버그를 지적하는데도 발견을 못했습니다.
정말 뭔가에 씌인듯한 느낌이네요.

좋은 정보 감사 합니다.
minjongi / 2014/11/26 15:23:55 / 추천 0
이제서야 다시 들어와서 확인했습니다
올려주신 소스 덕분에 작업 잘 마치게 되었습니다~
감사합니다~^^
PS. 염치불구하고 한가지만 더 여쭤보겠습니다^^;
올려주신 헬퍼를 사용하여 컨트롤러를 로드하면 로드된 컨트롤러 안에서 모델을 로드할때 세번째 인자를 true로 줘도
해당 모델에서 $this->db 가 먹히질 않네요...
그래서 해당 모델 생성자에 $this->load->database(); 이 코드를 추가해 보았는데 정상적으로 DB 접속이 되어 사용할 수 있었습니다
혹시 구조상 원래 그런건지 제가 잘못 사용을 한건지.. 저는 아무리 봐도 아직 답을 찾지 못하여 질문드립니다~
혹시 알고 계시다면 답변 부탁드리겠습니다~
한대승(불의회상) / 2014/11/26 19:53:39 / 추천 0
minjongi// database를 autoload에 등록해 주시거나 컨트롤러를 로드 하여 호출하기 전에 Database를 먼저 로드해 주시면 됩니다.
 
letsgolee / 2014/12/06 19:48:33 / 추천 0
load->library를 써도 되지 않나요?

$this->load->library('../Controllers/foo');

$this->foo->index();
한대승(불의회상) / 2014/12/06 21:37:46 / 추천 0
ㅎㅎ 그렇네요. ^^
발상의 전환