CI 묻고 답하기

제목 load library가 안될 때 무얼 살펴야 하나요?
글쓴이 letsgolee 작성시각 2013/09/26 18:14:52
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 14150   RSS
 안녕하세요.

코드이그나이터 배우길 시작한지 2달이 되갑니다. 이걸로 사무실에서 사용할 프로그램 제작 중인데 거기에 tank_auth가 로딩이 안되서 에러가 납니다. 문제는 앞부분이 동일한 다른 소스에서는 열리고 있다는 점입니다. 다음이 그 소스입니다.

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

class Worklog extends CI_Controller {
 function __construct()
 {
  parent::__construct();

  $this->load->library('session');
             $this->load->helper('url');
             $this->load->model('worklog_model');
             $this->load->library('tank_auth');
  $this->lang->load('tank_auth');
 }

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

 public function view_calendar($year = NULL, $month = NULL)
 {
  if (!$this->tank_auth->is_logged_in()) redirect(site_url('auth/'));
                ...
에러가 다음과 같이 나옵니다:
A PHP Error was encountered

Severity: Notice

Message: Undefined property: Worklog::$tank_auth

Filename: controllers/worklog.php

Line Number: 22


전에 세션이 동일 증상이어서 그냥 autoload에 등록을 해서 처리했는데 이것도 그런식으로 외에는 처리가 되지 않을까요? 

이와 비슷한 경험이 있으신 분들 조언을 부탁합니다.
 다음글 우분투 rewrite 설정 질문. (4)
 이전글 죄송합니다 다시 질문 좀 드리까합니다. (6)

댓글

변종원(웅파) / 2013/09/27 00:41:34 / 추천 0
ci log level 4로 찍어서 보세요. 중복호출되는지 등등..
letsgolee / 2013/09/27 08:24:30 / 추천 0
저도 확인해 보았는데  tank_auth의 config와 language는 잘 올라옵니다. 그리고 _construct에 로그 메시지를 넣어보았더니 initialize는 되네요. 그런데 에러는 동일합니다.
milosz / 2013/09/27 09:36:36 / 추천 0
 profiler 결과도 올려주시면 참고가 될 것 같네요.
letsgolee / 2013/09/27 10:04:14 / 추천 0
코어 파일들을 수정하여 로그 메시지를 넣도록 해서 테스트해보았는데 모든 게 정상적으로 tank_auth 변수도 생성이 되네요... 다음이 로그 일부입니다.

DEBUG - 2013-09-27 03:01:41 --> Library 'tank_auth' is loading...
DEBUG - 2013-09-27 03:01:41 --> ci_load_class: 'tank_auth' is loading...
DEBUG - 2013-09-27 03:01:41 --> ci_init_class: 'tank_auth' is creating...
DEBUG - 2013-09-27 03:01:41 --> ci_init_class: class name is 'Tank_auth'...
DEBUG - 2013-09-27 03:01:41 --> Config file loaded: application/config/tank_auth.php
DEBUG - 2013-09-27 03:01:41 --> Library 'session' is loading...
DEBUG - 2013-09-27 03:01:41 --> ci_load_class: 'session' is loading...
DEBUG - 2013-09-27 03:01:41 --> ci_init_class: 'session' is creating...
DEBUG - 2013-09-27 03:01:41 --> ci_init_class: class name is 'MY_Session'...
DEBUG - 2013-09-27 03:01:41 --> Session Class Initialized
DEBUG - 2013-09-27 03:01:41 --> Session routines successfully run
DEBUG - 2013-09-27 03:01:41 --> Model Class Initialized
DEBUG - 2013-09-27 03:01:41 --> Helper loaded: cookie_helper
DEBUG - 2013-09-27 03:01:41 --> Tank_auth Class Initialized
DEBUG - 2013-09-27 03:01:41 --> Language file loaded: language/english/tank_auth_lang.php
ERROR - 2013-09-27 03:01:41 --> Severity: Notice  --> Undefined property: Worklog::$tank_auth C:\public\htdocs\minolta\application\controllers\worklog.php 17
로그를 보면 정상적으로 ci_init_class()에 의해 변수 이름 tank_auth가 생성이 됬습니다. 따라서 적어도 tank_auth는 object가 되어야 하나 var_dump($this->tank_auth)를 찍으니 NULL값이 나옵니다.... 미친 거같아요.
변종원(웅파) / 2013/09/27 10:12:55 / 추천 0
전에도 비슷한 사례가 딱 하나 있었습니다.

모든게 정상적인데 특정 부분만 안되는....

ci파일 다시 받아서 올려보세요. tank_auth도요. 


(저도 어제 좀 고생한게 하나 있었는데 컨트롤러명을 lib_test로 만들었는데 처음엔 잘 실행이 됐는데
어느 순간부터 404에러가 나더군요. index.php 넣어주면 안나고 library_test로 해도 에러가 나고
test_lib로 하면 안나고요. ㅋㅋ)
letsgolee / 2013/09/27 10:20:40 / 추천 0
코어 파일의 Loader class의  ci_init_class() 내부에서 var_dump($CI->$classvar)를 찍을 때는 정상적으로 나옵니다.
또한 $this->load->_ci_classes안에도 tank_auth는 정상적으로 등록되었네요. 결국 $CI가 문제인듯. 다른 것은 잘 연계가 되는데 왜 tank_auth만 문제인지...
letsgolee / 2013/09/27 17:17:49 / 추천 0
 해결했습니다!!!
 
원인은 딴데 있었습니다. $this->load->library('tank_auth');를 하기 전 $this->load->model('worklog_model');이 있는데 여기에 문제가 있었습니다. 만들면서 카피/페이스트 작업을 했더니 엉뚱한데서 페이스트를 해서 Worklog_model extends CI_Controller가 되었네요.

그런데 tank_auth붙이기 전에는 잘 작동을 해서 전혀 문제를 발견하지 못하고 있다가 이번에 tank_auth가 제대로 붙지 않는 이유가 혹시 앞뒤로 문제가 있을 것 같은 생각이 들어 소스를 일일이 확인하다 발견하고 제대로 extends CI_Model로 바꾸니 잘 됩니다.
 
여러모로 답글 주신분들 감사합니다!!!
 
변종원(웅파) / 2013/09/27 18:07:54 / 추천 0
해결되서 다행이네요. ^^