앞으로 빈번하게 사용될일이 높은 함수들을 담아둘 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;
}