강좌게시판

제목 일반 PHP 프로젝트에 CI 적용하기
글쓴이 한대승(불의회상) 작성시각 2015/12/07 09:45:22
댓글 : 10 추천 : 0 스크랩 : 1 조회수 : 27568   RSS
한대승(불의회상)

자주 받았던 질문중 하나이고 CI를 알게 되었을 때 첫 번째로 하게 되는 고민..

 

좋은건 알겠는데..  지금 진행중이거나 사용중인 PHP 프로젝트에 어떻게 적용 시키지?

 

이 질문에 대한 답을 최근에 찾게 되어 공개 합니다. 

 

  • 설치 방법
  1. 코드이그나이터(CI 3.x or 2.x)를 설치 합니다.
  2. 첨부된 ci.zip 파일을 다운로드 받습니다.
  3. 압축을 해제 한 후 버전에 맞는 2.x(c20.php), 3.x(ci30.php) 를 에디터로 열어 $system_path 와 $application_folder 의 값을 설치된 CI의 위치로 바꿉니다.
  4. 진행중이거나 사용중인 php 프로젝트에서 CI를 적용시키고자 하는 php파일에 2.x(ci20.php), 3.x(ci30.php) 를 include 한 후 아래와 같이 테스트 해 봅니다.
  5. Lib 로 활용
  6. require_once 'ci30.php'; // CI 3.x
    // require_once 'ci20.php'; // CI 2.x
    
    echo $that->load->view('welcome_message', NULL, TRUE);
  7. CI의 컨트롤러를 호출
  8. require_once 'ci30.php'; // CI 3.x
    // require_once 'ci20.php'; // CI 2.x
    
    exec_controller('welcome', 'index');
  • 주의사항
  1. CI객체변수명을 메뉴얼에 명시된 것 처럼 $this를 사용하고 싶었으나, 예약어로 지정된 관계로 $that 을 사용 하였습니다.
  2. CI객체 변수명인 $that$ci 의 alias 입니다. 그러므로 $that 은 $ci 로 대체하여 사용 가능 합니다.
  3. 일반 php에서 $that, $ci 변수에 값을 할당 할 경우 CI와 연동이 되지 않게 됩니다. 사용시 $that, $ci 변수에 값이 할당 되지 않도록 주의 하여 주십시오.
  4. CI객체는 Singleton 패턴이 적용되어 있어 Lib 방식으로 모델, 라이브러리 로드 후 CI 컨트롤러를 호출하게 되면 에러가 납니다. Lib 방식이나 컨트롤러 호출 방식을 혼용하여 사용하지 마십시오.
  5. 잘못된 사용 예
  6. require_once 'ci30.php'; // CI 3.x
    // require_once 'ci20.php'; // CI 2.x
    
    // Lib 방식으로 모델을 로드함
    $that->load->model('rgb_m');
    
    // 컨트롤러 에서 rgb_m 모델을 로드하여 사용
    exec_controller('welcome', 'index');

영감을 준 “테러보이”님께 진심으로 감사 드립니다.

 

*첨부파일 

첨부파일 ci.zip (10.5 KB)
 다음글 [ci 수정] 일반 PHP 프로젝트에 CI 적용하기 (4)
 이전글 서브 디렉토리 index.php 죽이기 (5)

댓글

테러보이 / 2015/12/07 10:02:19 / 추천 0
감사합니다 ㅎㅎ
변종원(웅파) / 2015/12/07 11:12:16 / 추천 0
아. 이거 이야기한거 였군요. ㅎㅎ
Good job~~
쌈닭 / 2015/12/07 18:00:13 / 추천 0
// CI.php
---------------------------------------------------------------------------------
ob_start();
// 저는 index.php 를 따로 복사하진 않고 
// $system_path 와 $application_folder 만 수정했습니다.
require_once 'index.php'; 
ob_get_clean();
return $CI;
---------------------------------------------------------------------------------

// 외부파일
---------------------------------------------------------------------------------
$CI = require_once 'CI.php';
echo $CI->config->item('base_url');
---------------------------------------------------------------------------------
한대승(불의회상) / 2015/12/07 18:24:53 / 추천 0
@쌈닭 그것도 좋은 방법 입니다.
welcome.php 의 index 메소드를 function index(){} 로 선언하면 index.php만 include 하여 바로 사용 가능 합니다.

하지만 원하지 않는 디폴트 컨트롤러가 실행되는 부작용이 있고, CI 컨트롤러를 실행 시킬수 없는 단점이 있습니다.

 
쌈닭 / 2015/12/07 18:33:50 / 추천 0
@한대승 실무에 적용하기 전에 좀더 테스트 해봐야겠네요...

감사합니다.
/ 2015/12/08 16:55:12 / 추천 0
@한대승 신세계네요. 감사합니다!
이현재 / 2015/12/24 11:19:37 / 추천 0
감사합니다! 외부 파일에 ci설정을 끌어다 쓸 일이 있었는데 덕분에 해결했네요. 두 분 모두 감사드립니다.
한대승(불의회상) / 2016/01/28 16:02:35 / 추천 0

프로젝트 진행시 유용하게 사용 가능 하다 판단되어 지속적인 관리를 위해 github에 등록 하였습니다.

 

https://github.com/hoksi/codeigniter4purephp

곰뿅이 / 2016/06/28 13:46:06 / 추천 0

CI는 한번도 안써봤는데.. 

이걸로 CI시작하기엔 무리겠죠? .. 기존 프로젝트들이 워낙 엉망이라..

한대승(불의회상) / 2016/06/28 14:08:07 / 추천 0
@곰뿅이 스탭바이스탭... 가능한걸 하나씩 정리하면서 해보세요. 화이팅!!