CI 묻고 답하기

제목 hook 사용시 이해가 잘 안되는 점이 있어 문의 드립니다.
글쓴이 마카오최 작성시각 2016/02/11 16:38:50
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 20791   RSS

우선 포럼 리뉴얼 축하드립니다 ~ ^^

메뉴도 스무스?하게 나오고 뭔가 점점 고급져 가는 느낌이네요 ~ ㅎㅎ

 

http://www.ciboard.co.kr/user_guide/kr/general/hooks.html 메뉴얼을 참고하여 테스트 중..

hook을 사용하여 웹페이지를 보여주기전에 실행되야할 검사들을 처리후 보여주려고 하는데요...

/application/config/hooks.php 에는 아래와 같이 셋팅하였습니다.

$hook['post_controller_constructor'] = array(
	'class'    => 'System_config',
	'function' => 'index',
	'filename' => 'System_config.php',
	'filepath' => 'hooks',
	'params'   => array("")
);

 

/application/hooks/System_config.php 에는 아래와 같이 작성하였습니다.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class System_config extends CI_Controller {

	function __construct()
	{
		parent::__construct();
		$this->load->model('setting_m'); 

		//$CI =& get_instance();
		//$CI->load->model('setting_m'); 
	}

	public function index()
	{
		$this->set_config();
	}

	function set_config()
	{
		$data = $this->setting_m->get_row($data);
		//$data = $CI->setting_m->get_row($data);

		$result = var_dump($data);
		return $result;
	}
}

우선 여기까지 코드 작성을 하여 일단 디비에 저장된 로우를 제데로 가져오나 확인하려고 하는데 실행을 시키니

Unable to locate the specified class: Session.php

이런 오류메세지가 나옵니다..

원래 훅을 사용하면 훅내부에서는 load 등 ci_controller 내부 함수들을 사용할수 없는건가요?

코드내에 주석처리한것처럼 $CI 로 인스턴스화 시킨 상태로 접근하려고 해도 같은 에러가 나네요..

아니면 혹시 hook사용시 사용자정의 클래스를 ci_controller를 확장해서 사용하는것은 원래 안되는 것인가요?

 

검색을 해보니 해당오류메세지에 대한 조치사항들이 보여

1. $autoload['drivers'] = array('session');

$autoload['libraries']에서  session을 빼고 드라이버 항목에 추가하였구요.

 

2. config.php 내의  Session Variables 설정은 아래와 같습니다. (변동없이 그대로 가고있습니다)

$config['sess_driver'] 				= 'database';
$config['sess_cookie_name'] 		= TBL_CI_SESSION;
$config['sess_expiration'] 			= 7200;
$config['sess_save_path'] 		= TBL_CI_SESSION;//테이블이름
$config['sess_match_ip'] 			= TRUE;
$config['sess_time_to_update'] 	= 300;
$config['sess_regenerate_destroy'] = TRUE;

 

ci 버젼 3.04

php 버젼은 5.3 입니다. 버젼 문젠가 싶어 카페24 php7 웹호스팅 환경에도 동일 소스로 테스트해봤는데 똑같은 에러가 납니다.. 

 

훅을 사용하지 않고 원하는 기능을 함수로 만들어 매 클래스의 리맵등의 위치시키는것도 생각해봤지만 hook을 사용하면 뭔가 한번에 전처리과정을 일괄적으로 할수 있겠다 싶어 메뉴얼 보고 따라하는중 잘 안되서 질문 드립니다..

 다음글 url_helper 의 auto_link()
 이전글 크롬, ie 를 두개의 브라우저를 열면 응답이 없습니다... (3)

댓글

kaido / 2016/02/11 17:02:24 / 추천 1
class System_config extends CI_Controller {
	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
        }
    }

 

마카오최 / 2016/02/11 17:43:58 / 추천 0
$this->CI =& get_instance(); // 선언하는것과
if(!isset($this->CI->session)){  // 세션라이브러리 로드 유무를 확인하여 로드시키는 것

 

kaido 님 빠른답변 감사합니다 ^^ 알려주신 코드로 적용하니 바로 되네요. ~!

잘 사용하겠습니다~!!. ^^

 

class System_config extends CI_Controller {
	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
		}

		$this->CI->load->model('setting_m'); 
	}

	public function index()
	{
		$this->set_config();
	}

	function set_config()
	{
		$data = $this->CI->setting_m->get_row($data);

		$result = var_dump($data);
		return $result;
	}
}