CI 묻고 답하기

제목 session view 페이지에서 바로 사용 가능한가요??
글쓴이 이카르트 작성시각 2009/09/06 00:12:05
댓글 : 11 추천 : 0 스크랩 : 0 조회수 : 32153   RSS
   //세션저장하기
   $this->_setSessinAdmin();
   $data['sess_name'] = $this->session->userdata('username');
   $data['sess_level'] = $this->session->userdata('level');

이런식으로 컨트롤러에서 저장했는데요
뷰 페이지에서 $data 담긴 데이타 가져오는거 말구
session 의 값을 바로 가져오는 구문도 있나요? 

제가 php 문법을 잘몰라서용 ^^;;
좀 알려주세용~~ 
 다음글 jquery를 이용한 글쓰기 (2)
 이전글 CI의 취약점을 발견한 공격자라면.. (7)

댓글

마냐 / 2009/09/06 02:10:29 / 추천 0

뷰페이지에서 바로 가져오셔도 상관 없습니다
<?=$this->session->userdata('username')?>
 

이카르트 / 2009/09/06 17:39:54 / 추천 0
 아 감사! 
근데요 궁금한게 
$this-> 이렇게 쓰는 함수들(?) view 페이지에서도 다 쓸수 있는건가요?? 
컨트롤러에서만 사용되는게 아니구용?? 

그리고 테스트 하나 보니까 값이 없는경우.. 선언되지 않은경우는
다 오류로 나오던데요 .. 
혹시 empty 로 다 걸러줘야 하는건가요?? 

ci세상 / 2009/09/06 18:39:22 / 추천 0

$this는 view에서 100%는 아니고 98%는 사용가능합니다. 2%도 대안이 있으니 100%가능하다고 말씀드리구요.. CI의 큰 장점중 하나이기도 합니다.

<예>
$this->load->library('email');
- 컨트롤러, 뷰 호출가능 / 중복호출가능

$this->load->view('test');
- 컨트롤러, 뷰 호출가능 / 중복호출불가능

$this->메쏘드();
- 컨트롤러 가능
- 뷰 불가능 : 위젯사용시 가능


view에서 null값처리는 프로그래밍 원칙상에는 맞는것 같지만 좀 불편하다고 생각하시면 아래와 같이 고쳐서 사용가능하십니다.

http://codeigniter-kr.org/source/view/89/page/2/


즉, CI로 뭘 하시면서 불편하시면 마음대로 고쳐서 쓰세요 ^^

단 가급적이면 코어파일들은 고치지 마시구요~~

http://codeigniter-kr.org/tip/view/193/page/1/

SADBLUE / 2009/09/06 21:38:13 / 추천 0
$this 키워드는 생성되어진 객체에서 자기 자신을 가리키는 포인터라고 보시면 됩니다.
따라서 컨트롤에서 this와 user define class에서 this는 서로 다르게 됩니다.
model에서 this키워드를 사용 할 시에 컨트롤에 있는 method 나 멤버 변수들도 참조가 되던데..
이게 전 이해가 안가더라구요.
그래서 MY_Model wrapping해서 따로 get_instance를 받는 변수를 선언해서 따로 참조를 합니다.

변종원(웅파) / 2009/09/06 21:54:43 / 추천 0

엥.. 모델에서 자기를 호출한 컨트롤러의 this키워드에 의한 변수가 참조가 되요?
테스트 좀 해보겠습니다.
어떤 경우인지 예를 좀 들어주실 수 있는지요?
ci 구조상 컨트롤러에서 선언된 $this->변수 는 그 컨트롤러에서 사용되는 모델에서 직접 불러올 수가 없는데요? 함수의 매개변수로 넘기면 모를까....

라이브러리야 get_instance로 선언하여 사용을 해야하는 것이 맞지만요. ^^

SADBLUE / 2009/09/06 22:22:26 / 추천 0
네 저도 참 신기했어요.~_~
회사사람들이 model에서 controller에 있는 것들을 아무런 선언이나 그런것 없이
쓰고 있더라구요.
도저히 제 상식으로는 이해가 안가는 상황인데...회사 사람들이 그렇게 쓰고 있는 것이었습니다.;
일단 위에서 설명 드렸듯이 MY_Model을 만들어서 연결 변수를 배열로 만들어서 쓰고 있는 상황입니다.

근데 제가 테스트 할라고 보면 에러 나는 경우도 있고..
100% 다 참조 되는 것은 아닌것 같다 라고 생각 하고 머야 이건 이러고 있습니다.~_~
회사에서는 1.7 버전을쓰고 있습니다.
ci세상 / 2009/09/07 00:02:56 / 추천 0
새드블루님께서 보신것이 아마두 모델 확장 부분을 보신것이 아닐까? 생각하는데요

http://codeigniter.com/wiki/MY_Model_library/
SADBLUE / 2009/09/07 09:44:39 / 추천 0
아니요 그건 아닙니다.
모델상에서 $this->모델변수 = $this->컨트롤에서 load 한 라이브러리->method이런식으로 쓰이고 있습니다.
너무 많이 이렇게 사용해 놔서 수정을 포기 한 상태 입니다.~_~;

Die.t / 2009/09/08 16:49:46 / 추천 0
저는 model에서 컨트롤러에서 미리 정해둔 변수를 사용할 경우 $CI =& get_instance 한 후에 변수를 읽어오는 걸로 사용했는데 라이브러리의 model.php 파일을 보니 그럴 필요가 없네요..

_assign_libraries 라는 메쏘드로 $CI =& get_instance 한 값 전부를 $this->XXX 로 재지정 하고 있습니다.
아마도..컨트롤러 내에서 현재 모델을 호출하기 이전에 로드된 라이브러리 및 다른 모델의 메쏘드 등도 전부 $this 로 불러올 수 있도록 한 것 같네요..잘 쓰면 편할 듯..

덕분에 좋은 걸 알았습니다..

ci세상 / 2009/09/08 17:12:23 / 추천 0

Die.t / Model.php 라이브러리 소스상을 보시면 autoload.php를 이용하거나 사용자에 의해서 모델이 호출이 될때 ~~ 해당 모델을 체크 후 모든 메쏘드들을 담아두어서 사용할 수 있게 CI가 지원 해주고 있습니다. 이렇게 저장해 둔것은 MVC 어느곳에서나 사용이 가능하구요 ~~~ 이것이 편하다고 하신것이지요?

Die.t / 2009/09/10 19:21:59 / 추천 0
ci세상/
네..웅파님이 말씀한 모델에서 자기를 호출한 컨트롤러의 this키워드에 의한 변수가 참조된다는 것도 해당되구요..
전 당연히 안되는 줄 알았는데...ㅜ.ㅜ

생각해보니 $this->db->query 형식으로 모델에서 사용하는데..컨트롤러에서 지정한 변수나 메쏘드를 호출하지 못할 이유가 없겠더라구요...