헬퍼 함수들 Helper Functions

헬퍼는 여러분의 일에 뭔가를 제안하고 도와주는 존재입니다. 각각의 헬퍼파일은 특정 영역에 해당하는 함수들의 모음입니다. 예를 들어 URL 헬퍼 의 경우 링크 생성을 도와주며,Form 헬퍼는 폼의요소를 만드는데 도움이 되고, Text 헬퍼는 다양한 텍스트 처리(formatting)을 도와주며, Cookie 헬퍼는 쿠키를 읽고 쓰는데, File 헬퍼는 파일을 조작하는데 도움이 될것입니다.

CodeIgniter의 다른 시스템과는 다르게, 헬퍼는 객체지향적인 형태로 작성되지 않았습니다. 헬퍼의 함수들은 간단하고, 절차적입니다. 각 헬퍼 함수들은 특정한 한 가지 일만 하며, 다른 헬퍼 함수에 의존하지 않습니다.

CodeIgniter 는 헬퍼를 자동으로 로드하지 않으므로, 사용을 위해서는 먼저 해당 헬퍼를 로드해야 합니다. 한 번로드되면 여러분의 컨트롤러(controller)뷰(views) 에서 글로벌 하게 사용할 수 있습니다.

헬퍼는 통상 system/helpers 폴더application/helpers 폴더에 위치합니다. CodeIgniter 는 application/helpers 폴더를 먼저 살펴볼것입니다. 해당디렉토리가 없거나, 해당디렉토리에 찾는 헬퍼가 없다면 CI는 글로벌 헬퍼가 저장되어있는 system/helpers 폴더를 살펴볼것입니다.

헬퍼 로드하기 Loading a Helper

헬퍼를 로드하는 것은 다음 예제처럼 매우 간단합니다:

$this->load->helper('name');

name 은 헬퍼 파일 이름을 가리키며 .php 확장자 및 “helper” 부분은 붙이지 않습니다.

예를 들어 URL 헬퍼 를 로드할 경우, url_helper.php 라는 파일이므로 다음과 같이로드합니다:

$this->load->helper('url');

헬퍼는 사용하기 전에 반드시 먼저 로드해야 하며 컨트롤러의 어느 함수 안에서 로드해도 상관 없습니다. 심지어 뷰 파일 안에서도 로드할 수 있습니다만 권장하지 않습니다. 헬퍼를 컨트롤러의 생성자에서 로드해두면 컨트롤러 내부의 어떤 함수에서도 바로 사용할 수 있습니다. 그렇지 않으면 헬퍼가 필요한 해당 함수에서 로드하여 사용하셔도 됩니다.

Note

헬퍼를 로드하는 것은 리턴값이 없으므로 리턴값을 저장하기위하여 변수에 할당하지 마시기 바랍니다. 그저 위의 예시처럼 사용하시면 됩니다.

여러 개의 헬퍼 로드하기 Loading Multiple Helpers

여러 개의 헬퍼를 로드해야할 경우, 아래와 같이 배열을 이용할 수 있습니다:

$this->load->helper(
        array('helper1', 'helper2', 'helper3')
);

헬퍼 자동 로드 Auto-loading Helpers

헬퍼가 프로그램 전반에 광범위하게 쓰여야한다면 자동로드 설정으로 시스템 초기화 과정에서 자동으로 로드할 수 있습니다. application/config/autoload.php 파일을 연다음 autoload 배열에 해당 헬퍼를 추가해주세요.

헬퍼사용하기 Using a Helper

헬퍼는 일단 한 번 로드 되면, 표준 PHP 함수를 사용하듯 사용하면 됩니다.

예를 들어 anchor() 함수를 이용하여 링크( a 태그)를 생성한다면 View 파일에서 다음과 같이 사용할 수 있습니다 :

<?php echo anchor('blog/comments', 'Click Here');?>

“Click Here” 은 이름( a 태그 안에 name 속성)이 되고 “blog/comments” 는 연결하고자 하는 url 이 됩니다. 이 URL 은 통상 controller/function 형태를 가지게 되겠죠.

헬퍼의 확장 “Extending” Helpers

헬퍼를 확장하려면 application/helpers/ 폴더아래 기존 헬퍼와 겹치지 않는 이름의 파일을 만듦니다. 이 때 이름의 접두어는 MY_ 가 되어야 합니다.(이부분은 설정이 가능합니다. 아래를 보세요).

기존헬퍼에 두어개의 함수를 추가할 경우 헬퍼를 새로 작성하는 것은 낭비입니다. 이런경우 기존의 헬퍼를 상속(extends)하는 것이 현명합니다. 상속(extend)라는 말은 대략적으로 사용하겠습니다. 왜냐하면 헬퍼함수는 절차적이며따로따로 작용하기 때문입니다. 헬퍼는 전통적인 프로그램 기법과는 다르게 상속(extends) 됩니다. 이 방법을 통해서 기존의 헬퍼에 기능을 추가하거나 기존기능을 수정할 수 있게 됩니다.

Note

“확장” 이라는 말은 헬퍼 함수가 절차적이며 분리된 것이기 때문에, 그리고 전통적인 프로그래밍 상식으로 확장될 수 없기 때문에, 느슨하게 이용됩니다. 후드 기능은 헬퍼가 제공하는 함수들을 추가하거나 교체하는 역할을 합니다.

예를 들어 내장된 배열(Array Helper) 를 사용할 경우 application/helpers/MY_array_helper.php 파일을 생성하고 함수를 추가하거나 재정의합니다:

// any_in_array() is not in the Array Helper, so it defines a new function
function any_in_array($needle, $haystack)
{
        $needle = is_array($needle) ? $needle : array($needle);

        foreach ($needle as $item)
        {
                if (in_array($item, $haystack))
                {
                        return TRUE;
                }
        }

        return FALSE;
}

// random_element() is included in Array Helper, so it overrides the native function
function random_element($array)
{
        shuffle($array);
        return array_pop($array);
}

나만의 접두어 설정하기 Setting Your Own Prefix

파일명의 접두어는 헬퍼에도 쓰이지만,라이브러리 및 코어클래스를 “확장”할 때에도 쓰입니다. 나만의 접두어를 설정하려면 application/config/config.php 에서 아래의 아이템을 찾은후 설정하시면 됩니다:

$config['subclass_prefix'] = 'MY_';

모든 CodeIgniter 내장 라이브러리의 접두어는 CI_ 이므로 나만의 접두어로 사용할 수 없습니다.

이제 무엇을 Now What?

목차페이지에서 다양한 헬퍼를 만나실수 있습니다.