헬퍼(helper) 함수

이름에서 알 수 있듯이 헬퍼는 작업을 도와줍니다. 각 헬퍼 파일은 단순히 특정 범주의 함수(function) 모음입니다. 링크를 만드는 데 도움이되는 URL 헬퍼가 있고, 양식 요소를 만드는 데 도움이되는 Form 헬퍼가 있습니다. Text 헬퍼는 다양한 텍스트 서식 루틴을 수행합니다. Cookie 헬퍼 쿠키 읽기, File 헬퍼는 파일 처리 등을 도와줍니다.

CodeIgniter의 헬퍼는 다른 대부분의 시스템과 달리 객체 지향(OOP) 형식으로 작성되지 않습니다. 각 헬퍼 기능은 단순하고 절차적인 기능으로, 다른 기능에 의존하지 않고 하나의 특정 작업을 수행합니다.

CodeIgniter는 기본적으로 헬퍼 파일을 로드(load)하지 않으므로 헬퍼 사용의 첫 번째 단계는 헬퍼 파일을 로드하는 것입니다. 일단 로드되면 컨트롤러에서 사용할 수 있습니다.

헬퍼는 일반적으로 system/Helpers 또는 app/Helpers 디렉토리에 저장됩니다. CodeIgniter는 app/Helpers 디렉토리에서 헬퍼를 먼저 찾습니다. app/Helpers 디렉토리가 존재하지 않거나 지정된 헬퍼가 없는 경우 system/Helpers 디렉토리를 찾습니다.

헬퍼 로드(load)

Note

URL 헬퍼는 항상 로드되므로 직접 로드할 필요가 없습니다.

다음 메소드를 사용하여 헬퍼 파일을 매우 간단하게 로드합니다.

<?php

helper('name');

여기서 name은 “.php” 파일 확장자 부분 또는 “_helper” 부분이 없는 “헬퍼”파일의 이름입니다.

예를 들어, Cookie 헬퍼를 사용하기 위해 cookie_helper.php 파일을 로드하려면 다음과 같이 하십시오.

<?php

helper('cookie');

Note

위의 헬퍼 로딩 방법은 값을 반환하지 않으므로 변수에 할당하려고 하지 마십시오. 표시된 대로 사용하면 됩니다.

다중 헬퍼 로드

한 번에 둘 이상의 헬퍼를 로드해야 하는 경우 파일 이름 배열을 전달하면 모든 파일이 로드됩니다.

<?php

helper(['cookie', 'date']);

컨트롤러에서 로드

헬퍼를 사용하기 위해 컨트롤러 메소드(또는 좋은 방법은 않니지만 뷰 파일)의 어느 위치에서도 로드할 수 있습니다. 컨트롤러 생성자에서 헬퍼를 로드하여 모든 메소드에서 사용할 수 있도록 하거나, 헬퍼가 필요한 특정 메소드에서 헬퍼를 로드할 수 있습니다.

그러나 컨트롤러 생성자에서 직접 로드하는 대신 컨트롤러의 $helpers 속성을 사용할 수 있습니다. 컨트롤러를 참조하십시오.

비표준 위치에서 로드

Autoloader 구성 파일의 PSR-4 섹션에 네임스페이스를 설정하면 app/Helperssystem/Helpers가 아닌 다른 위치의 헬퍼를 로드할 수 있습니다. 헬퍼 이름 앞에 네임스페이스를 지정할 수 있으며, 로더는 네임스페이스가 있는 디렉토리의 Helpers서브 디렉토리에서 헬퍼를 찾습니다. 이를 이해하는 데 도움을 줄 예를 들어 보겠습니다.

먼저 모든 블로그 관련 코드를 자체 네임스페이스 인 Example\Blog로 그룹화 했다고 가정합니다. 파일은 서버의 Modules/Blog/디렉토리에 존재합니다. 따라서 블로그 모듈의 헬퍼 파일을 Modules/Blog/Helpers/에 넣습니다. blog_helper 파일은 Modules/Blog/Helpers/blog_helper.php에 있습니다. 컨트롤러 내에서 다음 메소드를 사용하여 헬퍼를 로드할 수 있습니다.

<?php

helper('Example\Blog\blog');

다음과 같은 방법을 사용할 수도 있습니다.

<?php

helper('Example\Blog\Helpers\blog');

Note

이러한 방식으로 로드된 파일내의 함수는 실제로 네임스페이스가 아닙니다. 네임스페이스는 단순히 파일을 찾기 위한 방법으로 사용됩니다.

헬퍼 사용하기

사용하려는 함수가 포함 된 헬퍼 파일을 로드하면 표준 PHP 함수와 같은 방식으로 호출합니다.

예를 들어, 뷰 파일 중 하나에서 anchor() 함수를 ​​사용하여 링크를 만들려면 다음과 같이 합니다.

<div>
<?= anchor('blog/comments', 'Click Here') ?>
</div>

여기서 Click Here는 링크의 이름이고 blog/comments은 링크하려는 컨트롤러/메소드의 URI입니다.

헬퍼 확장

헬퍼를 “확장”하려면 app/Helpers/ 폴더에 기존 헬퍼와 동일한 이름으로 파일을 작성하십시오. 기존 헬퍼에 일부 기능을 추가하기 - 하나 또는 두 개의 함수를 추가하거나 특정 도우미 함수의 작동 방식을 변경 - 위해 전체 헬퍼를 새로운 버전으로 교체하는 것은 과도합니다. 이 경우 헬퍼를 “확장”하는 것이 좋습니다.

Note

“확장”이라는 용어는 헬퍼 기능이 절차적이고 개별적이며 전통적인 프로그램 의미로 확장 될 수 없기 때문에 느슨하게 사용되며, 헬퍼에 기능을 추가하거나 교체할 수 있는 능력을 제공 합니다.

예를 들어 네이티브 Array Helper를 확장하려면 app/Helpers/array_helper.php라는 파일을 만들고 함수를 추가하거나 재정의합니다.

<?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 : [$needle];

    foreach ($needle as $item) {
        if (in_array($item, $haystack, true)) {
            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);
}

helper() 함수는 app/Config/Autoload.php에 정의된 모든 PSR-4 네임스페이스를 검색하여 동일한 이름과 일치하는 모든 헬퍼를 로드합니다. 이를 통해 모듈의 헬퍼와 이 어플리케이션을 위해 특별히 만든 헬퍼를 로드할 수 있습니다. 로드 순서는 다음과 같습니다.

  1. app/Helpers - 여기에 있는 파일은 항상 먼저 로드됩니다..

  2. {namespace}/Helpers - 모든 네임스페이스는 정의 된 순서대로 반복하여 검색됩니다.

  3. system/Helpers - 기본 파일이 마지막으로 로드됩니다

Now What?

목차에는 사용 가능한 모든 헬퍼의 목록이 있습니다. 그들이 하는 일을 보려면 각각을 찾아보십시오.