본문으로 바로가기

[PHP] CodeIgniter HOOK

category Helloworld!/PHP 2016. 12. 15. 09:54
새벽에 잠시 서버점검을 위해 어떤 홈페이지를 들어가더라도 서버점검중이라는 페이지를 띄우는 작업이 필요했다.
그래서 CI에서 Hook을 이용해서 컨트롤러가 돌기전, 아예 시스템 작동 초기 상태일때 바로 시스템 점검 중이라는 페이지를 띄우도록 했다.
방법은 다음과 같다.

1. Hook 활성화
후킹은 클로벌로 동작하기 때문에 아래의 변수를 활성화 시켜야한다.
config/config.php 로 가면
$config['enable_hooks'] = FALSE;
이 있는데, 이 부분을 TRUE 로 바꿔줘야한다.
$config['enable_hooks'] = TRUE;

2. Hook 정의
config/hooks.php로 가서 후크를 다음과 같은 형태로 정의한다.
$hook['pre_system'][] = [
    'class' => 'SystemOfInspection',
    'function' => 'systemOfInspection',
    'filename' => 'SystemOfInspection.php',
    'filepath' => 'hooks'
    //'params' => array('server1', 'server2', 'etc');
];

- class 는 호출하고자하는 클래스의 이름 정의. 클래스는 대신 순차함수를 사용한다면 이 항목을 공백으로 해주면 된다.
- function 는 호출하고자하는 함수명을 정의한다.
- filename - filepath 는 파일경로(파일명을 제외한 디렉토리 경로)를 쓴다.
- params 는 스크립트로 전달하고자 하는 파라미터를 넣는다.

여기서 Hook Points 는 pre_system 말고도 여러종류가 있다.
- pre_system 시스템 작동초기입니다.벤치마크와 후킹클래스들만 로드된 상태로서, 라우팅을 비롯한 어떤 다른 프로세스도 진행되지않은 상태.
- pre_controller 컨트롤러가 호출되기 직전. 모든 기반클래스(base classes), 라우팅 그리고 보안점검이 완료된 상태.
- post_controller_constructor 컨트롤러가 인스턴스화 된 직후. 즉 사용준비가 완료된 상태가 되겠죠. 하지만, 인스턴스화 된 후 메소드들이 호출되기 직전.
- post_controller 컨트롤러가 완전히 수행된 직후.
- display_override _display() 함수를 재정의. 최종적으로 브라우저에 페이지를 전송할 때 사용됩니다. 이로서 당신만의 표시 방법( display methodology)을사용할 수 있음. 주의 : CI 부모객체(superobject)를 $this->CI =& get_instance() 로 호출하여 사용한 후에 최종데이터 작성은 $this->CI->output->get_output() 함수를 호출하여 할 수 있음
- cache_override 출력라이브러리(Output Library) 에 있는 _display_cache() 함수 대신 당신의 스크립트를 호출할 수 있도록 해줌. 이로서 당신만의 캐시 표시 메커니즘(cache display mechanism)을 적용할 수 있음
- post_system

최종 렌더링 페이지가 브라우저로 보내진후에 호출

3. 마지막으로 후크에 정의한 클래스, 함수들을 만드는 곳은 application/hooks 디렉터리 안에 만든다.



참고 사이트
http://www.ciboard.co.kr/user_guide/kr/general/hooks.html
http://www.cikorea.net/bbs/view/lecture?idx=12894&lists_style=
http://gauryan.blogspot.kr/2010/03/codeigniter.html