PHP Variables to Javascript Variables with Codeigniter 3 Hook

가끔 PHP 변수를 Javascript 로 넘겨주어 사용해야 할 때가 종종 있습니다.

Javascript 안에 <?php ?> 와 같은 php 표현식을 써야하므로 (템플릿을 사용중이면 템플릿 변수) 표현이나 가독이나 좋아 보이지만은 않죠.

 

‘원하는 경우 PHP 변수를 Javascript 변수로 손쉽게 사용할 수는 없는걸까?’

라는 질문이 생길 수 있습니다.

 

‘특정 변수는 모든 페이지에서 Javascript 변수로 사용할 수 있으면 좋겠는데??’

이런 요구 또한 발생하기도 합니다.

 

첫번 째 요구사항을 위해서는 PHP 변수를 Javascript 변수로 사용하게 해주는 외부라이브러리를 추가해주고,

두번 째 요구사항을 위해서는 Codeigniter 프레임워크에서 제공해주는 hook 기능을 사용하시면 됩니다.

 

PHP Variables to Javascript Variables (Codeigniter Library)

PHP Variables to JavaScript Variables in CodeIgniter

라이브러리 다운로드 주소
https://github.com/iarjunphp/PHP-Vars-To-Js-Transformer-For-CodeIgniter

 

 

 

저는 로그인이 되어 있는지 구분해주는 CI의 sesseion 변수 하나를 javascript 변수로 모든 페이지에서 사용할 수 있도록 간단한 코드를 작성하여 아래의 이름으로 hook 파일을 만들어 주었습니다.

Common_hook.php (application/hooks 폴더에 넣고 config/hooks.php 파일에서 filepath 를 ‘hooks’ 로 맞추어 줍니다.)

 

class Common_hook
{
    private $CI;

    function __construct()
    {
        $this->CI =& get_instance();

        if(!isset($this->CI->session)){  //Check if session lib is loaded or not
            $this->CI->load->library('session');  //If not loaded, then load it here
        }

        if(!isset($this->CI->PHPtoJS)){  //Check if session lib is loaded or not
            $this->CI->load->library('PHPtoJS');  //If not loaded, then load it here
        }
    }


    public function inits(){

        $CI =& get_instance();
        $CI->load->library('PHPtoJS',['namespace' => 'arjun']);
        $CI->phptojs->put([
            'HOOK_PHPTOJS_VAR_ISLOGIN' => $CI->session->userdata('logged_in')
        ]);
    }
}

 

 

 

 

config/hooks.php

$hook['post_controller_constructor'] = array(
    'class'    => 'Common_hook',
    'function' => 'inits',
    'filename' => 'Common_hook.php',
    'filepath' => 'hooks'
);

 

훅이 동작하는 시기는 post_controller_constructor 로 설정하였고 post_controller 로 설정하면 컨트롤러를 모두 수행하고 난 다음 훅이 동작되므로 변수를 뷰로 넘겨주지 못하게 됩니다.  용도에 알맞게 훅을 동작시킬 시점을 구분하여 설정하시면 되겠습니다.  이를 후크 포인트라고 부르는데요 아래의 메뉴얼을 보시면 사용가능한 후크포인트들을 모두 확인 가능합니다.

 

 

마지막으로 javascript 변수를 사용할 view 파일에서는 아래와 같이 사용하면 됩니다.

<?php echo $this->phptojs->getJsVars(); ?>


if(!HOOK_PHPTOJSVAR_ISLOGIN){
    var result = confirm("로그인이 필요합니다. 로그인/회원가입 단계로 이동하시겠습니까?");
    if(result){
         // your own code....
    }
}


변수이름이 서버사이드스크립트쪽 그것도 훅에서 넘겨준거라 수일이 지난 후에 view 페이지에서 해당변수의 뜬금없는 등장에 나중에 당황할 수도 있습니다.
본인이 만들었으나 본인이 기억못하는 경험이 반복되신다면 변수 이름을 통해 어디서 정의된것인지 유추 가능하도록 해주시면 좋습니다.
저는 대문자 및 HOOK_PHPTOJSVAR_ 라는 다소 긴 prefix 를 사용하였습니다.

 

 

Hook 사용법

http://www.ciboard.co.kr/user_guide/kr/general/hooks.html

https://www.cikorea.net/bbs/view/lecture?idx=12894