개발 Q&A

제목 library호출시 문제가 되는 부분 질문좀 ..
글쓴이 neo천 작성시각 2014/01/03 10:16:23
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 16059   RSS
 //다들 새해복 많이 받으시구.. 좀 길더라도 꼭 답변좀 부탁드릴게요 ㅠㅠ
<!--?php
//파일위치 controllers
class AdminSetThird_con extends CI_Controller
{
private $securityFunc;
function __Construct()
{
parent::__Construct();
$this->init();
}
 
.
.
.
"생략"
.
.
 
private function init()
{
$this->load->helper(array('form' , 'url'));
$this->load->model('model_mng' , 'mObjCustomer');
$this->load->model('model_mng' , 'mObjUser');
$this->load->model('model_mng' , 'mObjPut');
$this->mObjCustomer->setModelMNG(new CustomerInfo_model);
$this->mObjUser->setModelMNG(new UserInfo_model);
$this->mObjPut->setModelMNG(new PutInfo_model);
 
$this->load->library('form_validation');
$this->load->library('securityfunc');
}
}
?>
 
<!--?php//파일위치 libraries
class securityfunc extends CI_Controller
{
function __Construct()
{
parent::__Construct();
}
public function CheckGrade($user)
{
$grade = $this->session->userdata('grade');
if($grade != $user)
{
$notice['notice'] = "로그인하세요";
header("..생략..");
break;
}
}
}
?>
 
맨위의 AdminSetThird_con 클래스에서
초기화시 securityfunc 클래스를 라이브러리에서 불러옵니다. 
 
문제는 $this->load->library('securityfunc'); 하면 화면이 뜨질 않습니다. 주석처리하면 뜨고요.
 
$this->load->library('uploadimg_con');은 되는데..말이죠..ㅠㅠ

밑에 uploadimg_con 입니다.
 
<!--?php파일위치 libraries
class uploadimg_con extends CI_Controller
{
function __Construct()
{
parent::__Construct();
$c>
$this->load->library('upload', $config);
}
..생략..
}
?>
 
두 클래스에서 문제는 없어보이는데..잘못된부분이 있는건가요?
 
제가 의도한것은 제가 만든 클래스를  라이브러리 불러오듯이 호출할려고하는데.. 
uploadimg_con는 되는데 securityfunc은 잘안되네요.

//참고 : 두 클래스 모두 소문자를 사용한 이유는 uploadimg_con를 이런식으로 사용해도 되길래 securityfunc도 네이밍 문제인가해서 소문자로 바꿨습니다. uploadimg_con는 다른 클래스에서 잘사용하고있습니다.


 
그래서 다른 방법을 쓸려고 이런식으로..
 
2번째방법
<!--?phprequire_once 'securityFunc.php';
 
//파일위치 controllers
class AdminSetThird_con extends CI_Controller
{
private $securityFunc;
function __Construct()
{
parent::__Construct();
$this->init();
$this->securityFunc->CheckGrade(ADMIN);
}
private function init()
{
$this->load->helper(array('form' , 'url'));
$this->load->model('model_mng' , 'mObjCustomer');
$this->load->model('model_mng' , 'mObjUser');
$this->load->model('model_mng' , 'mObjPut');
$this->mObjCustomer->setModelMNG(new CustomerInfo_model);
$this->mObjUser->setModelMNG(new UserInfo_model);
$this->mObjPut->setModelMNG(new PutInfo_model);
$this->load->library('form_validation');
 
$this->securityFunc = new SecurityFunc;
}
}
?>
 
<!--?php//파일위치 controllers
class SecurityFunc extends CI_Controller
{
function __Construct()
{
parent::__Construct();
}
public function CheckGrade($user)
{
$grade = $this->session->userdata('grade');
if($grade != $user)
{
$notice['notice'] = "로그인하세요";
header("..생략..");
break;
}
}
}
?>
 
두 클래스 모두 controllers 폴더에 만들고
$this->securityFunc = new SecurityFunc;식으로 햇죠.
작동은 잘됩니다. 문제는
 
이런식으로 하니까 form_validation에서 폼검증
되던 부분에서 검증은 하는데 form_error(..생략..);에 값이 안찍히더군요.
 
require_once 'securityFunc.php';
$this->securityFunc = new SecurityFunc;
$this->securityFunc->CheckGrade(ADMIN);
위 부분들을 주석처리form_error(..생략..);잘 작동하구요.
 
다시 정리해서 질문드릴게요.
 
1)생성을 할때 모델 $this->load->model
제가 만든 클래스를 $this->load->library하는 것에 상관관계가 있는가요?
생성 순서라던지..어떤 문제라던지..
 
2)1번째 방법에서 $this->load->library할때
securityfunc 클래스를 호출하면 화면이 안뜨고
uploadimg_con 클래스를 호출하면 화면이 잘떠요. form_error(PRODUCT_NAME)값은 안찍히구요.
securityfunc가 안된다는 말은 클래스가 틀렸을 가능성이 있는데..
2개의 클래스중에 특별히 틀린 부분이 안보이는데 왜그런지 모르겠네요..
 
3)그리고 2번째 방법에서 form_validation은 왜 form_error(..생략..)안찍히는 걸까요?

//참고:
밑에 부분은 참고하시라고 남기는거에요.
private function init()
{
$this->load->helper(array('form' , 'url'));
$this->load->model('model_mng' , 'mObjProduct');
$this->load->library(array('uploadimg_con' , 'form_validation'));
$this->mObjProduct->setModelMNG(new ProductInfo_model);
$this->securityFunc = new SecurityFunc;
}
다른 클래스의 초기화 부분인데
$this->load->model을 호출한 후에
$this->securityFunc = new SecurityFunc;를 
호출하면 정상작동하나 반대로 $this->securityFunc = new SecurityFunc;를 먼저
$this->load->model를 후에 호출하면 모델을
사용할때 에러가 생기더군요..그래서 1)번 질문을 드린거구요..


 
만드는 내내 이런 부분에서 문제가 생겨서
 
이번엔 꼭 알고 넘어가고 싶네요 ㅠㅠ
 
친절한 답변 부탁드릴게요 ㅠㅠ..
 
 다음글 pdf파일 업로드후 화면에 출력에 대해서 질문합니다 (1)
 이전글 회원가입에 관한 질문 (3)

댓글

변종원(웅파) / 2014/01/03 10:26:24 / 추천 0
매뉴얼을 다시 보시면 해결하실 수 있을 것 같네요.
neo천 / 2014/01/03 10:48:49 / 추천 0
 죄송합니다 사실 메뉴얼을 계속 봐왔지만 어느 부분이 잘못된지를 잘못찾겠습니다.
방금도 다시 한번보고 왔지만 잘모르겠네요.

CodeIgniter 리소스를 여러분의 라이브러리와 함께 사용하기

이부분이 좀 걸리는데..

제가만든 라이브러리 클래스는 CI_Controller를 상속했기 때문에 문제가 되는건지요..

좀더 자세히 짚어주시면 감사하겠습니다 ㅠ

어느부분이 걸리는지만 짚어주셔도 제가 해결하도록 노력해볼게요
변종원(웅파) / 2014/01/03 10:50:41 / 추천 0
클래스 파일

클래스는 반드시 아래의 프로토타입 형태를 따라야합니다.(Note: Someclass 이라는 이름은 예를 든것입니다.):

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

class Someclass {

    public function some_function()
    {
    }
}

/* End of file Someclass.php */

여러분의 클래스를 사용하기

어떤 여러분의 콘트롤러 함수에서도 여러분의 클래스를 아래와 같이 초기화 할수 있습니다.:

$this->load->library('someclass');

neo천 / 2014/01/03 11:18:13 / 추천 0
 네이밍에서 정확히 무슨 문제가 되는지를 잘모르겠네요.

클래스명을 class security_func 이런식으로 '_'를 추가했을뿐인데 작동을 하네요.

대소문자  class S(s)ecurity_func구분없이 다 되구요..

이부분이 해결되도.. 왜 폼검증은 제대로 작동하는데 form_error(..생략..)에서 값을 못찍는지는..

모르겠네요.(폼검증할때 콜백함수를 호출하는데 제대로 호출하는거는 확인했어요)

neo천 / 2014/01/03 13:05:05 / 추천 0
새해복 많이 받으세요.

제가만든 라이브러리 class security_func는  
extends CI_Controller처럼 CI상속을 받아서 쓰면 안돼네요.

메뉴얼에 나와있듯이 본인이 만든 라이브러리에서 CI를 사용할려면

$this->CI =& get_instance();
$this->CI->load->library('session'); 처럼 해야하네요.

정상작동합니다. 

프레임워크는 처음 사용하는거라 제 머리랑 

프로그램이랑 따로 돌아가네요.

도구는 사용하는 사람의 역량에 달린거 같습니다.

답변주신 웅파님 감사합니다.

다들 새해복 받으세요.


 

변종원(웅파) / 2014/01/03 14:05:58 / 추천 0
extend에 대한 것은 잘 알고 계신데 라이브러리 사용법이 틀렸기에 매뉴얼 읽어보시라고 한겁니다.

읽어보시니 덤으로 라이브러리에서 ci 내부자원 사용법도 아셨죠. ^^
 
neo천 / 2014/01/06 09:36:22 / 추천 0
 예 ㅎㅎ ci한국포럼덕분에 많이 배우고 갑니다. 항상 감사히 생각해요~