| 제목 | hook 사용시 이해가 잘 안되는 점이 있어 문의 드립니다. | ||
|---|---|---|---|
| 글쓴이 | 마카오최 | 작성시각 | 2016/02/11 16:38:50 |
|
|
|||
|
우선 포럼 리뉴얼 축하드립니다 ~ ^^ 메뉴도 스무스?하게 나오고 뭔가 점점 고급져 가는 느낌이네요 ~ ㅎㅎ
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
|
|
마카오최
/
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;
}
}
|
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 } }