CI 묻고 답하기

제목 $this->load->library() 인자값 문제점.
글쓴이 아싸리비아 작성시각 2014/10/21 16:02:06
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 14807   RSS

안녕하세요 소스 분석하다 보니 이상한점이 있어서 질문하러 왔습니다 ^^;;
library 로드시 2번째 인자값 ( library 초기 선언 인자값 )에 대한 문제점입니다.
초기 코드이그나이터 2.2.0 + hmvc 5.4 버전으로 테스트용 라이브러리를 만들었습니다.

$this->load->library('TestLibrary', $params);

여기서 $params 타입은 String으로 파일경로를 전달하는 방식이였으나,
hmvc 5.4의 한계점이나 문제점이 발견되어 제거후 codeigniter 2.2.0 만 사용하는 방식으로 변경하였습니다.


훔 근대 여기서 String 으로 전달한 2번째 인자값이 null 처리가 되는 이상현상이 발생되어
system/core/Loader.php 를 확인 하였는데..


public function library($library = '', $params = NULL, $object_name = NULL) 메소드 내용중
if ( ! is_null($params) && ! is_array($params)) {
            $params = NULL;
}


와 같이 배열이 아닌 인자값일때 null로 처리하게 변경되는 문제점이 발생되었습니다.
우선 해당 부분 주석처리 하여 정상처리가 되는걸 확인 하였으나,

기존 시스템 파일을 건든다는게 꺼림직해서 의도된 인자값인지 확인 하고 있으나, 
도통 !is_array 가 들어간 이유에 대해서 모르겠더군요;;

메소드 설명에서도 mixed 타입으로 꼭 array로 정의되어있진 않은데..
@param    mixed    the optional parameters


흠.. 그래서 영문 메뉴얼 확인하니 

In the library loading function you can dynamically pass data as an array via the second parameter and it will be passed to your class constructor:

가 눈에 띄네요.. 에궁;;



먼가 의도한거 같으면서 의도가 아닌듯 보이지만 -_-;;
해당 부분에 대해서 정확히 아시는분은 해당 부분에 대해서 궁금하고,
혹 라이브러리 제작방식이 생성자에 Array 타입에 인자값을 방식으로 해야한다면
한글 메뉴얼에 강조해서 추가해야 하지 않을까 싶습니다. ( 한참을 헤맷습니다 ㅠ.ㅠ )


흠.. 코드이그나이터가 익숙해지는 그날까지 -_-~~ 

 

 다음글 정말 초보자질문일것 같은데요 로그인 관련해서 문의 드립... (17)
 이전글 라디오버튼 값 가져오기 질문요 (1)

댓글

한대승(불의회상) / 2014/10/21 16:38:13 / 추천 0
CI는 사용자 라이브러리에서 사용되는 파라메터는 array로 넘기도록 되어 있습니다.
config 와 호환되도록 하게 하기 위해서 인데요.
applicatioin/config 폴더에 라이브러리명과 같은 config 파일을 만들어주면 해당 파일에 명시된 배열 정보로 라이브러리를 초기화 합니다.
변종원(웅파) / 2014/10/21 17:06:57 / 추천 0
값을 여러개 넘겨야할 경우엔 어떻게 처리해야 할까요?
확장성을 염두에 둔거라 생각하시면 됩니다. 
아싸리비아 / 2014/10/21 18:20:48 / 추천 0
불의회상님, 웅파님 답변 감사합니다 ^^

기존에 만들어놓은 라이브러리가 급 먹통이 되서 당황했습니다.
!is_array 에 대한게 의문이 들었던건 core 단 로직을 확인해보니
array 외 string, int 같은 단일 변수도 혼용사용가능한 로직이다보니 혼동이 왔네요 ㅎㅎ

어떻게보면 명시적으로 방법론을 지정하는게 좋은 방법이니 저렇게 규칙을 정해놓은거 같다라고 생각도 들네요~
추가적으로 불의회상님 께서 말씀하신 config 연동 규약에 의해서 발생된 제한성으로 보여지기도 하네요 ^^