04. 자주쓰는 함수를 위한 common_helper

앞으로 빈번하게 사용될일이 높은 함수들을 담아둘 common_helper를 만들겟습니다.

application/helpers 폴더에 common_helper.php 파일을 만듭니다.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*************************************************************
 * common_helper
 * 전페이지에서 공통으로 사용하는 Helper
 ************************************************************ 

페이지 상단에 위와같이 추가합니다.

먼저 개발시 여러가지 오브젝트값을 보기 좋게 출력할 함수를 선언하겠습니다.
단순 print_r을 <pre>태그로 감싸주는 함수입니다.

/**
 * print_r 을 예쁘게 출력해준다.
 * @param object $str   출력할 오브젝트
 **/
function print_r2($str) {
    echo "<pre>";
    print_r($str);
    echo "</pre>";
}

다음으로 자바스크립트의 alert창을 띄우고 특정페이지로 이동 또는 뒤로가기를 실행하는 함수입니다.

/*****************************************************************************************
 * Alert 창을 띄우고 특정 URL로 이동합니다.
 * @param string $msg   띄울 메시지 창
 * @param string $url   이동할 URL
 ****************************************************************************************/
function alert($msg = '', $url = '')
{
    if (empty($msg)) {
        $msg = "잘못된 접근입니다.";
    }
    echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">';
    echo '<script type="text/javascript">alert("' . $msg . '");';
    if (empty($url)) {
        echo 'history.go(-1);';
    }
    if ($url) {
        echo 'document.location.href="' . $url . '"';
    }
    echo '</script>';
    exit;
}

두번째 매게변수에 url 경로가 입력되어있다면 메시지 출력후 해당 url로 이동하고, url값이 생략되어있다면 뒤로가기를 실행합니다.

다음으로 만들함수는 application/config.php 에 입력했던 encryption_key 항목을 기억하시나요? 그 키를 이용하여 암호화 문자열을 만들어주는 함수입니다.


/**
 * 특정문자열을 암호화하여 내보낸다.
 * @param string $string    암호화할 문자열
 * @return string
 */
function get_password_hash($string)
{
    $CI =& get_instance();
    return hash( 'sha256', hash('md5', $CI->config->item('encryption_key') . $string ) );
}

암호화키 + 암호화할 문자열을 md5로 먼저 암호화 한 후, sha256 으로 한번 더 암호화를 해줍니다. 필자는 이전에 md5로만 암호화를 했었으나 몇개월전 한국인터넷진흥원에서 점검을 나왔을당시 암호화를 md5로 한번만 하지말고 다른 암호화형식으로 한번더 암호화 하기를 권장하더라구요.

다음으로 추가할 함수는 지난 포스팅에서 사용했던 element 라는 함수입니다. 이 함수는 배열내의 특정키값을 가진 값을 가져오는데, 만약 선언되어 있지 않거나 값이 없으면 지정한 기본값을 리턴하도록 되어있습니다.


/**
 * 배열의 특정 키값을 가져옵니다.
 * @param string $item      배열의 키 값
 * @param array $array      검사할 배열
 * @param string $default   값이 없을시 기본값
 * @return mixed|null
 */
function element($item, $array, $default = NULL)
{
    return is_array($array) && array_key_exists($item, $array) &&  $array[$item] ? $array[$item] : $default;
}

사실 이 함수는 코드이그나이터의 helper중 array 헬퍼에도 존재하는 함수인데요, 코드이그나이터의 경우는 값이 없는지까지는 체크하지 않고 키값이 존재하는지만 체크를 합니다.

마지막으로 추가해줄 함수는 current_full_url 이라는 함수입니다.
코드이그나이터에서 url 헬퍼에 있는 current_url() 이라는 함수가 있긴하지만 그 함수는 GET으로 넘긴 패러미터값은 같이 가져오지 않도록 되어있습니다.


/**
 * 현재 주소를 Parameter 포함해서 가져온다.
 * @param boolean $encoding_url 현재 주소를 리턴할때 URL인코딩 여부
 * @return string
*/
function current_full_url($encoding_url = FALSE)
{
    $CI =& get_instance();
    $url = $CI->config->site_url($CI->uri->uri_string());
    $return = ($CI->input->server('QUERY_STRING')) ? $url . '?' . $CI->input->server('QUERY_STRING') : $url;
    return $encoding_url ?  urlencode($return) : $return;
}

또한 매개변수 첫번째 인수로 true를 설정하면 현재 url을 urlencode 상태로 가져오게 됩니다.

아래는 완성된 전체 코드입니다.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*************************************************************
 * common_helper
 * 전페이지에서 공통으로 사용하는 Helper
 ************************************************************/
/**
 * print_r 을 예쁘게 출력해준다.
 * @param object $str   출력할 오브젝트
 */
function print_r2($str) {
    echo "<pre>";
    print_r($str);
    echo "</pre>";
}

/**
 * Alert 창을 띄우고 특정 URL로 이동합니다.
 * @param string $msg   띄울 메시지 창
 * @param string $url   이동할 URL
 */
function alert($msg = '', $url = '')
{
    if (empty($msg)) {
        $msg = "잘못된 접근입니다.";
    }
    echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">';
    echo '<script type="text/javascript">alert("' . $msg . '");';
    if (empty($url)) {
        echo 'history.go(-1);';
    }
    if ($url) {
        echo 'document.location.href="' . $url . '"';
    }
    echo '</script>';
    exit;
}

/**
 * 특정문자열을 암호화하여 내보낸다.
 * @param string $string    암호화할 문자열
 * @return string
 */
function get_password_hash($string)
{
    $CI =& get_instance();
    return hash( 'sha256', hash('md5', $CI->config->item('encryption_key') . $string ) );
}

/**
 * 배열의 특정 키값을 가져옵니다.
 * @param string $item      배열의 키 값
 * @param array $array      검사할 배열
 * @param string $default   값이 없을시 기본값
 * @return mixed|null
 */
function element($item, $array, $default = NULL)
{
    return is_array($array) && array_key_exists($item, $array) &&  $array[$item] ? $array[$item] : $default;
}


/**
 * 현재 주소를 Parameter 포함해서 가져온다.
 * @param boolean $encoding_url 현재 주소를 리턴할때 URL인코딩 여부
 * @return string
*/
function current_full_url($encoding_url = FALSE)
{
    $CI =& get_instance();
    $url = $CI->config->site_url($CI->uri->uri_string());
    $return = ($CI->input->server('QUERY_STRING')) ? $url . '?' . $CI->input->server('QUERY_STRING') : $url;
    return $encoding_url ?  urlencode($return) : $return;
}

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.