헬퍼 Helper Functions
헬퍼는 여러분의 일에 뭔가를 제안하고 도와주는 존재입니다. 각각의 헬퍼파일은 특정 영역에 해당하는 함수들의 모음입니다.예를 들어 URL 헬퍼 의 경우 링크생성을 도와주며,Form 헬퍼는 폼의요소를 만드는데 도움이 되고, Text 헬퍼는 다양한 텍스트 처리(formatting)을 도와주며, Cookie 헬퍼는 쿠키를 읽고 쓰는데, File 헬퍼는 파일을 조작하는데 도움이 될것입니다.
CodeIgniter의 다른 시스템과는 다르게 ,헬퍼는 객체지향적인 형태로 작성되지않았습니다.헬퍼의 함수들은 간단하고 ,절차적입니다. 각 헬퍼 함수들은 특정한 한가지 일만하며 ,다른 헬퍼함수에 의존하지않습니다.
CodeIgniter 는 헬퍼를 자동으로 로드하지않으므로 ,사용을 위해서는 먼저 해당 헬퍼를 로드해야합니다. 한번로드되면 여러분의컨트롤러 및 뷰 에서 글로벌 하게 사용할 수 있습니다. .
헬퍼는 통상system/helpers폴더나 system/application/helpers 폴더에 위치합니다. CodeIgniter 는 system/application/helpers 폴더를 먼저 살펴볼것입니다. 해당디렉토리가 없거나, 해당디렉토리에 찾는 헬퍼가 없다면 CI는 글로벌 헬퍼가 저장되어있는 system/helpers 폴더를 살펴볼것입니다.
헬퍼 로드하기
헬퍼를 로드하는것은 다음예제처럼 매우 간단합니다:
$this->load->helper('name');
name 은 헬퍼파일 이름을 가리키며 .php 확장자 및 _helper 는 붙이지 않습니다.
예를 들어 URL 헬퍼 를 로드할경우, url_helper.php 라는 파일이므로 다음과 같이로드합니다:
$this->load->helper('url');
헬퍼는 사용하기전에 반드시 먼저 로드해야하며 컨트롤러의 어느함수안에서 로드해도 상관없습니다. 심지어 뷰파일 안에서도 로드할수있습니다만 권장하지않습니다. 헬퍼를 컨트롤러의 생성자에서 로드해두면 컨트롤러 내부의 어떤 함수에서도 바로 사용할 수 있습니다.그렇지않으면 헬퍼가 필요한 해당 함수에서 로드하여 사용하셔도 됩니다..
Note: 헬퍼를 로드하는 것은 리턴값이 없으므로 리턴값을 저장하기위하여 변수에 할당하지 마시기 바랍니다.그저 위의 예시처럼 사용하시면 됩니다..
여러개의 헬퍼 로드하기
여러개의 헬퍼를 로드해야할경우 ,아래와같이 배열을 이용할 수 있습니다:
$this->load->helper( array('helper1', 'helper2', 'helper3') );
헬퍼 자동 로드
헬퍼가 프로그램 전반에 광범위하게 쓰여야한다면 자동로드 설정으로 시스템 초기화 과정에서 자동으로 로드할 수 있습니다.application/config/autoload.php 파일을 연다음 autoload 배열에 해당 헬퍼를 추가해주세요.
헬퍼사용하기
헬퍼는 일단 한번 로드 되면 ,표준 PHP 함수를 사용하듯 사용하면 됩니다..
예를 들어 anchor() 함수를 이용하여 링크(< a 태그)를 생성한다면 View 파일에서 다음과같이 사용할 수 있습니다.:
<?php echo anchor('blog/comments', 'Click Here');?>
"Click Here" 은 이름( <a 태그 안에 name 속성)이 되고 "blog/comments" 는 연결하고자하는 url 이 됩니다.이 URL 은 통상 controller/function 형태를 가지게 되겠죠.
헬퍼의 확장
헬퍼를 확장하려면application/helpers/ 폴더아래 기존 헬퍼와 겹치지않는 이름의 파일을 만듦니다.이 때 이름의 접두어는 MY_ 가 되어야합니다.(이부분은 설정이 가능합니다. 아래를 보세요).
기존헬퍼에 두어개의 함수를 추가할경우 헬퍼를 새로 작성하는것은 낭비입니다. 이런경우 기존의 헬퍼를 상속(extends)하는것이 현명합니다.상속(extend)라는 말은 대략적으로 사용하겠습니다. 왜냐하면 헬퍼함수는 절차적이며따로따로 작용하기 때문입니다. 헬퍼는 전통적인 프로그램 기법과는 다르게 상속(extends) 됩니다. 이방법을 통해서 기존의 헬퍼에 기능을 추가하거나 기존기능을 수정할 수 있게됩니다.
예를들어 내장된 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);
}
나만의 접두어 설정하기
파일명의 접두어는 헬퍼에도 쓰이지만,라이브러리 및 코어클래스를 확장할때에도 쓰입니다. 나만의 접두어를 설정하려면 application/config/config.php 에서 아래의 아이템을 찾은후 설정하시면됩니다.
$config['subclass_prefix'] = 'MY_';
모든 CodeIgniter 내장 라이브러리의 접두어는CI_ 이므로 나만의 접두어로 사용할수 없습니다.
이제 뭐하지?
목차페이지에서 다양한 헬퍼를 만나실수 있습니다.