훅 - 프레임워크 코어 확장

CodeIgniter의 훅 기능은 코어 파일을 해킹하지 않고도 프레임워크의 내부 작동에 개입하고 수정할 수 있는 수단을 제공합니다. CodeIgniter가 실행되면 애플리케이션 흐름 페이지에 다이어그램으로 표시된 특정 실행 프로세스를 따릅니다. 그러나 실행 프로세스의 특정 단계에서 어떤 액션을 수행하게 하고 싶은 경우가 있을 수 있습니다. 예를 들어 컨트롤러가 로드되기 직전이나 직후에 스크립트를 실행하거나, 다른 위치에서 자신만의 스크립트 중 하나를 트리거하고 싶을 수 있습니다.

훅 활성화

훅 기능은 application/config/config.php 파일에서 다음 항목을 설정하여 전역적으로 활성화/비활성화할 수 있습니다:

$config['enable_hooks'] = TRUE;

훅 정의

훅은 application/config/hooks.php 파일에 정의됩니다. 각 훅은 다음 프로토타입을 가진 배열로 지정됩니다:

$hook['pre_controller'] = array(
        'class'    => 'MyClass',
        'function' => 'Myfunction',
        'filename' => 'Myclass.php',
        'filepath' => 'hooks',
        'params'   => array('beer', 'wine', 'snacks')
);

참고:

배열 인덱스는 사용하려는 특정 훅 포인트의 이름과 연관됩니다. 위의 예시에서 훅 포인트는 pre_controller입니다. 훅 포인트 목록은 아래에 있습니다. 연관 훅 배열에는 다음 항목을 정의해야 합니다:

  • class 호출하려는 클래스의 이름. 클래스 대신 절차적 함수를 사용하려면 이 항목을 비워두세요.

  • function 호출하려는 함수(또는 메소드) 이름.

  • filename 클래스/함수가 포함된 파일 이름.

  • filepath 스크립트가 포함된 디렉터리 이름. 참고: 스크립트는 application/ 디렉터리 내부의 디렉터리에 있어야 하므로 파일 경로는 해당 디렉터리에 상대적입니다. 예를 들어 스크립트가 application/hooks/에 있는 경우 단순히 ‘hooks’를 filepath로 사용합니다. 스크립트가 application/hooks/utilities/에 있는 경우 ‘hooks/utilities’를 filepath로 사용합니다. 후행 슬래시 없음.

  • params 스크립트에 전달하려는 매개변수. 이 항목은 선택 사항입니다.

람다/익명 함수(또는 클로저)를 훅으로 사용할 수도 있으며, 더 간단한 구문을 사용합니다:

$hook['post_controller'] = function()
{
        /* 여기서 무언가를 합니다 */
};

동일한 훅에 여러 번 호출

동일한 훅 포인트에 하나 이상의 스크립트를 사용하려면 다음과 같이 배열 선언을 다차원으로 만들면 됩니다:

$hook['pre_controller'][] = array(
        'class'    => 'MyClass',
        'function' => 'MyMethod',
        'filename' => 'Myclass.php',
        'filepath' => 'hooks',
        'params'   => array('beer', 'wine', 'snacks')
);

$hook['pre_controller'][] = array(
        'class'    => 'MyOtherClass',
        'function' => 'MyOtherMethod',
        'filename' => 'Myotherclass.php',
        'filepath' => 'hooks',
        'params'   => array('red', 'yellow', 'blue')
);

각 배열 인덱스 뒤의 괄호에 주목하세요:

$hook['pre_controller'][]

이를 통해 여러 스크립트로 동일한 훅 포인트를 가질 수 있습니다. 배열을 정의하는 순서가 실행 순서가 됩니다.

훅 포인트

다음은 사용 가능한 훅 포인트 목록입니다.

  • pre_system 시스템 실행 초기에 호출됩니다. 이 시점에서는 벤치마크와 훅 클래스만 로드되어 있습니다. 라우팅이나 다른 프로세스는 아직 실행되지 않았습니다.

  • pre_controller 컨트롤러가 호출되기 직전에 호출됩니다. 모든 기본 클래스, 라우팅, 보안 검사가 완료된 상태입니다.

  • post_controller_constructor 컨트롤러가 인스턴스화된 직후, 메소드 호출이 발생하기 전에 호출됩니다.

  • post_controller 컨트롤러가 완전히 실행된 직후에 호출됩니다.

  • display_override 시스템 실행이 끝날 때 최종 페이지를 웹 브라우저에 전송하는 데 사용되는 _display() 메소드를 재정의합니다. 이를 통해 자신만의 디스플레이 방법을 사용할 수 있습니다. CI 슈퍼 오브젝트를 $this->CI =& get_instance()로 참조해야 하며, 최종 데이터는 $this->CI->output->get_output()을 호출하여 사용할 수 있습니다.

  • cache_override Output 라이브러리_display_cache() 메소드 대신 자신만의 메소드를 호출할 수 있습니다. 이를 통해 자신만의 캐시 디스플레이 메커니즘을 사용할 수 있습니다.

  • post_system 최종 렌더링된 페이지가 브라우저에 전송된 후, 최종 데이터가 브라우저에 전송된 후 시스템 실행이 끝날 때 호출됩니다.