| 제목 | codeigniter 에서 Library 폴더를 서브 폴더로 구성해서 사용하기 | ||
|---|---|---|---|
| 글쓴이 | 서치 | 작성시각 | 2010/05/27 01:29:36 | 
|  | |||
| 2007년 개인 블로그에 작성한 글입니다.. 퍼갈시 출처 표기 바랍니다. ------------------------- 개인적으로 codeigniter 를 능숙하게 쓰는건 아니지만 조금 큰 규모의 사이트를 제작하다 보니 서브 폴더를 사용해야 했다. 나중에 알고본 사실이지만 다른 문제도 발생했었다^^; 그건 다시 적기로 하고 글을 이어나간다. controller 에서 library 를 로드할때 다음과 같이 서브 폴더를 포함해 읽어들이도록 하면 에러가 발생한다. $this->load->library ( 'member/libmember' ); 때문에 좀 큰 규모의 설정을 바꿔줘야 한다. codeigniter 가 설치된 디렉토리에서 다음과 같은 경로를 따라간다. system/libraries 이 안에 들어가서 Loader.php 를 열고 679 번째 줄을 찾아 다음 내용을 삽입한다. 
// Is the class in a sub-folder? If so, parse out the filename and path.
if (strpos($class, '/') === FALSE)
{
    $path2 = '';
}
else
{
    $x = explode('/', $class);
    $class = end($x);
    unset($x[count($x)-1]);
    $path2 = implode('/', $x).'/';
}
그 리고 나서 다음 내용을 아래와 같이 수정한다. 수정전 : 
// Is this a class extension request?
if (file_exists(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT))
{
    if ( ! file_exists(BASEPATH.'libraries/'.ucfirst($class).EXT))
    {
        log_message('error', "Unable to load the requested class: ".$class);
        show_error("Unable to load the requested class: ".$class);
    }
    include(BASEPATH.'libraries/'.ucfirst($class).EXT);
    include(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT);
    return $this->_ci_init_class($class, config_item('subclass_prefix'), $params);
}
수 정후 : 
// Is this a class extension request?
if (file_exists(APPPATH.'libraries/'.$path2.config_item('subclass_prefix').$class.EXT))
{
    if ( ! file_exists(BASEPATH.'libraries/'.$path2.ucfirst($class).EXT))
    {
        log_message('error', "Unable to load the requested class: ".$class);
        show_error("Unable to load the requested class: ".$class);
    }
    include(BASEPATH.'libraries/'.$path2.ucfirst($class).EXT);
    include(APPPATH.'libraries/'.$path2.config_item('subclass_prefix').$class.EXT);
    return $this->_ci_init_class($class, config_item('subclass_prefix'), $params);
}
그 리고 다음 줄을 찾아서 수정후로 바꿔준다. 수정전 : $fp = $path.'libraries/'.$class.EXT; 수정후 : $fp = $path.'libraries/'.$path2.$class.EXT; 이렇게 해주면 다음과 같이 가능하다. libraries/member/libmember.php 파일이 있다면 라이브러리 로드시에 다음과 같이 사용해도 에러가 나지 않는다. $this->load->library ( 'member/libmember' ); 만약 위처럼 수정하지 않는다면 라이브러리는 서브폴더를 사용하지 못하게 된다. | |||
| 다음글 | codeigniter library 에서 객체 사용하기 | ||
| 이전글 | CodeIgniter에서 controller와 meth... (2) | ||
| 
                                변종원(웅파)
                                /
                                2010/05/27 09:25:54 /
                                추천
                                0
                             | 
| 
                                서치
                                /
                                2010/05/27 09:40:43 /
                                추천
                                0
                             
                                그렇군요. 제가 이 고민을 하던 시점이 2007년 그러니까.. 1.5.4 이하 버전까지라서.. 그 이후엔 CodeIgniter를 안 봤으니... 뒷북이군요 -.-;; 역시나 | 
| 
                                변종원(웅파)
                                /
                                2010/05/27 10:20:12 /
                                추천
                                0
                             
                                이런 고민이 있었기에 현재와 같은 모습이 되었고 계속 발전이 되어 가는 거겠죠. ^^ 오늘 올리신 다른 자료는 다른 분들께 도움이 많이 될 자료들입니다. | 
제가 1.6.3버전부터 사용을 했는데 이 부분은 코어에 적용이 되어 있었던 것 같네요. ^^