보조 클래스 만들기

경우에 따라 컨트롤러와 별개로 존재하지만 CodeIgniter의 모든 리소스를 활용할 수 있는 클래스를 개발하고 싶을 수 있습니다. 아래에서 볼 수 있듯이 이것은 쉽게 가능합니다.

get_instance()

get_instance()
반환:

컨트롤러 인스턴스에 대한 참조

반환 형식:

CI_Controller

컨트롤러 메소드 내에서 인스턴스화하는 모든 클래스는 get_instance() 함수를 사용하여 CodeIgniter의 기본 리소스에 접근할 수 있습니다. 이 함수는 메인 CodeIgniter 오브젝트를 반환합니다.

일반적으로 사용 가능한 메소드를 호출하려면 CodeIgniter에서 $this 구문을 사용해야 합니다:

$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
// 등

하지만 $this는 컨트롤러, 모델, 뷰 내에서만 작동합니다. 자신만의 커스텀 클래스 내에서 CodeIgniter의 클래스를 사용하려면 다음과 같이 할 수 있습니다:

먼저 CodeIgniter 오브젝트를 변수에 할당합니다:

$CI =& get_instance();

오브젝트를 변수에 할당하면 $this 대신 해당 변수를 사용합니다:

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
// 등

다른 클래스 내에서 get_instance()를 사용할 경우 프로퍼티에 할당하는 것이 좋습니다. 이렇게 하면 모든 메소드에서 get_instance()를 호출할 필요가 없습니다.

예시:

class Example {

        protected $CI;

        // 프로퍼티 정의에서 함수를 직접 호출할 수 없으므로 생성자를 사용합니다.
        public function __construct()
        {
                // CodeIgniter 슈퍼 오브젝트 할당
                $this->CI =& get_instance();
        }

        public function foo()
        {
                $this->CI->load->helper('url');
                redirect();
        }

        public function bar()
        {
                $this->CI->config->item('base_url');
        }
}

위의 예시에서 Example 클래스를 인스턴스화한 후 foo()bar() 메소드 모두 각각에서 get_instance()를 호출할 필요 없이 작동합니다.