질문 Q #17498
hook 제대로 작동 되지 않는 현상
마음열기 2017-04-27 10:50:51

PHP v5.8, CI v3 이상을 사용하고 있습니다.

간단하게 말씀드리자면... hook이 제대로 작동 하지를 않습니다.

 

hooks 설정

$hook['pre_controller_constructor'][] = array(
	'class' => 'CommonClass',
	'function' => 'login_check',
	'filename' => 'CommonClass.php',
	'filepath' => 'hooks'
);

 

CommonClass 내용

class CommonClass {
	private $ci = '';

	public function __construct() {
		$this->ci =& get_instance();
		$this->ci->load->library('util');
	}

	public function login_check() {
		$ci =& get_instance();
		$ci->load->library('util');

		if ($ci->input->cookie('user_id') != '') {
			$ci->load->model('member_model', 'member', true);
			$ci->member->login_history($this->ci->input->cookie('user_id'));
		}
	}
}

위와 같습니다. 별거 없습니다. 계정이 cookie에 저장 되어 있다면 로그인 history를 쌓아 주는 것입니다.

근데 웃기는 건 hook 포인트가 'pre_controller' 이면 전혀! 아무런 반응도 없고!

'pre_controller_constructor' 로 잡으면 libray 로드 하는 부분 부터 몽땅 에러가 발생합니다.

매우 단순하고 간단한 기능인데 무엇이 문제인지 모르겠습니다.

이런 현상을 격어 보셨거나, 문제 원인을 알고 계신분의 도움이 필요합니다. ㅜㅜ

답변 3
#1 kaido 2017-04-27 10:57:17

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

 

pre_controller_constructor 이라는 옵션은 없는것 같습니다.

문서 참고하셔서 타이밍은 연구해 보셔야 합니다.

pre_controller 이라면 컨트롤러가 사용되기 전이고, 라이브러리들이 로드 되기 전일 수도 있겠네요.

 

개인적으로 세션 작업 후킹은 post_controller_constructor 으로 작업 합니다.

 

밑에는 제가 작성한 간단한 hook 사용법.

http://cikorea.net/bbs/view/lecture?idx=12894&page=1&view_category=&lists_style=

 

#2 변종원(웅파) 2017-04-27 11:04:09

pre_controller로 하고 $ci->input->cookie('user_id') 를 출력해보세요.

pre_controller_constructor 는 없습니다.

#3 한대승(불의회상) 2017-04-27 11:26:28
application/config/config.php 파일 여셔서 $config['enable_hooks'] 이 TRUE로 되어 있는지 확인해 보세요.