CI 묻고 답하기

제목 컨트롤러에서 view로 값 던지기 질문드립니다.
글쓴이 다다닷 작성시각 2014/08/24 12:08:40
댓글 : 14 추천 : 0 스크랩 : 0 조회수 : 28751   RSS
안녕하세요. 오랜만에 글을 올리네요..

개인 게시판을 만들고있는데

현재 컨트롤러에서 뷰로 값을 던지는 과정에서 몇시간째헤메고있네요..

현재 사용하는 방법은

아래와 같습니다.


컨트롤러 

    class Ctrl_menu_board_write_insert extends CI_Controller{
            
        public function __construct() 
        {
            parent::__construct();
            
        }
               
        public function getMenuboardwrite($no){
            
            $this->model_menu_board->board_get_contents(&$obj,$no);
            $cont['getcont']=$obj;
            $this->load->view('view_menu_board_write',$cont);    
        }            
    }
?>


뷰에서는 위에서 던지는

print_r($getcont); exit; 로 받아서

값을 찍고 있는데.. 계속 undefine $getcont라는 오류구문을띄우네요..

자료실에 올라온 내용도 보고 그대로 했지만..왜 이런 오류가 뜨는지 모르겠습니다..


A PHP Error was encountered

Severity: Notice

Message: Undefined variable: getcont

Filename: views/view_menu_board_write.php

Line Number: 24

 다음글 CI URL 변경 하는 방법 질 문드립니다. (4)
 이전글 redirect 문제 (3)

댓글

kaido / 2014/08/24 14:04:04 / 추천 0
 $obj =$this->model_menu_board->board_get_contents(&$obj,$no);
 $cont['getcont']=$obj;
 $this->load->view('view_menu_board_write',$cont);    


 
다다닷 / 2014/08/24 17:25:30 / 추천 0
@kaido 저렇게 안해도.. 되어야 정상인데.. 저렇게 해도 안되네요..
수야디벨 / 2014/08/25 09:24:28 / 추천 0
안될리가 없을텐데.. 일단 카이도님이 수정하신거처럼 변수를 받아서 할당해 주셔야 합니다.

그럼 $obj 에 값이아무것도 안담기나보네요.

print_r($obj)해서 값이 정상적으로 출력되는지 확인해 보세요~
변종원(웅파) / 2014/08/25 10:06:35 / 추천 0
단계별로 출력을 해보세요.
$obj 변수는 어디서 선언한건가요?
letsgolee / 2014/08/25 11:32:47 / 추천 0
$obj는 함수의 리턴 값을 값을 갖도록 해야지 reference방식으로 하면 안됩니다. php버젼이 높아지면서 그 방식은 deprecated 되었어요.
CI_ORL / 2014/08/25 12:03:16 / 추천 0
view_menu_board_write('$data'){
$data = $getcont;
}

선언을 하지 않으신건 아닐까요??

 
다다닷 / 2014/08/25 17:48:52 / 추천 0
@수야디벨 
저도..안될리가 없는데.. 안되더라구요. print_r($obj); 하면 값 정상적으로 db에서 가지고오고 있습니다.

@변종원(웅파) 
나름 단계별로 한다고했는데.. 실제로 컨트롤러에서는 모델에서 던져주는 &$obj 값을 잘 받고 있습니다.
$obj는 모델에서 &$obj로 값을 공유 하고 있습니다.

@letsgolee
아.. 그런가요.. ? php 버전 높아지면서 이방식이.. . 제가 알기로는 현재 5.2버전을 쓰고있는데.. 같은 프로젝트에서 
다른 파일에서는 잘되어서.. 쓰다가 이런 문제가 생겨서 글을 올리게 되었습니다.

@ CI_ORL 
무슨 말씀이신지 잘 이해가안가네요.어디서 선언을 하지 않았다는건가요.??
한대승(불의회상) / 2014/08/25 18:05:11 / 추천 0
코드가 아무래도 이상하네요.
모델 코드를 올려주세요.
다다닷 / 2014/08/26 09:49:43 / 추천 0

@한대승(불의회상)
모델단 코드입니다.
public function board_content(&$obj,$no){
    
            $sql = "select * from board_table where no = $no ";
            $query = $this->board_db->query($sql);
            $obj = $query->result_array();
                                
        }

실제 하나씩해본 결과

모델에서  print_r($obj); 결과 정상출력
컨트롤러에서 print_r($obj); 결과 정상출력
되었습니다.


 

변종원(웅파) / 2014/08/26 10:02:48 / 추천 0
매뉴얼대로 정상적으로 결과 리턴해서 뷰에 넘겨보세요.
안되면 ci 자체 문제이고 되면 하신 방식이 ci와 맞지 않는 것이니까요. (또는 php버전)
한대승(불의회상) / 2014/08/26 10:31:30 / 추천 0
PHP,CI울고싶다 // 그렇군요...
 
 $this->model_menu_board->board_get_contents(&$obj,$no);
호출 할 때 이렇게 하는거 이상 합니다.
에러 나지 않던가요?
아래 처럼 해보시고 결과 알려주세요.
 $this->model_menu_board->board_get_contents($obj,$no);
letsgolee / 2014/08/26 11:44:11 / 추천 0
굳이 reference로 넘기는 이유가 뭔가요?

모델에서 return $query->result_array(); 한 후
ontroller에서 $obj = $this->model_menu_board->board_get_contents($no); 이것이 더 가독성 및 소스유지에도 좋을 텐데요.
다다닷 / 2014/08/31 12:03:55 / 추천 0
안녕하세요. 모든 분들에게 감사드립니다.

아무래도 확인해보니

$no   = $_GET['no'];
            $fnc = new Ctrl_menu_board_write_insert();
            $fnc -> getMenuboardwrite($no);

뷰에서 컨트롤러로 값을 이렇게 던지는 부분이 있는데 이부분을 모델에서 $this->input->get('$no') 로
받게 처리 하니 잘 되네요.. 아무래도 제가 짠 로직이 꼬인거 같았습니다.

그리고 

@한대승(불의회상)
말씀하신대로 작성해도 오류는 안나더라구요.. 두가지 방법 다사용해봤습니다..
저렇게 사용해도 오류는 없는거 같아요..
말씀하신대로 &$obj가 정상적인 방법은아닌거같아요.. $obj로 넘기고 모델단에서 &$obj로 넘기는게
맞구요..ㅎㅎ

@letsgolee
맞습니다.. 저도 컨트롤러단에서 저렇게 받아서 사용하는게 가독성 면에서 좋다고 생각합니다.^^ 고맙습니다
 
한대승(불의회상) / 2014/09/01 09:08:16 / 추천 0
PHP,CI울고싶다// 문제가 잘 해결되었다니 다행입니다. ^^

오류가 나지 않는다면 PHP버전이 달라서인것 같군요.
http://php.net/manual/kr/language.references.pass.php

모델에서 입력값을 직접 받아 오는것보다 컨트롤러에서 받아온후 검증하여 모델에 넘겨주는게 좋습니다.
그렇게 하면 모델의 재사용성도 늘고 부작용(side effect)도 줄어들게 됩니다.

오늘도 즐거운 코딩 되시길..