CI 묻고 답하기

제목 _remap 함수로 함수 인자를 보낼 경우 처리 방법 질문
글쓴이 IamMonk 작성시각 2015/09/08 22:10:38
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 25111   RSS
만배코 책에 나온데로 응용하면 header와 footer를 자동으로 넣어줘서 매 page를 header/body/footer로 load시켜주는것 보다 코드도 절약되고 많이 편리합니다만 한가지 문제가 있는데요...
함수 인자값을 넣어서 호출할 경우 (초창기 개발한 시스템이 이렇게 되있어서 지금 삽질 중...)에는 header와 footer도 loading이 안되고 인자값도 않넘어 옵니다. 물론 URI Segment로 하면 값도 받을 수 있고 header/footer도 표시가 됩니다만 기존 시스템을 손을 데는 김에 좀 더 낳은 가독성으로 개선해 볼려고 들여다 보고 있는데 뭐가 방법이 없을까요?
인터넷을 검색하니 아래와 같은 방법이 나오던데 이것을 응용해서 쓰면 footer가 loading이 안되더라고요.
public function _remap($method, $params = array())
{
    $method = 'process_'.$method;
    if (method_exists($this, $method))
    {
        return call_user_func_array(array($this, $method), $params);
    }
    show_404();
}
줄곳 Windows/VB/Classic ASP를 쓰다가 FreeBSD/PHP(요즘은CI)로 3,4년째 스킬을 바꾸는 중인데 아직도 많이 헤메고 있습니다.
고수님들의 조언 부탁드립니다.
 다음글 CI 2.2.0 에서 서버의 0 바이트 출력에러.... (6)
 이전글 mysql hex암호화 질문입니다. (2)

댓글

kaido / 2015/09/09 08:52:29 / 추천 0
$para = array();
$data = array();
  if($this->input->is_ajax_request()){
   if( method_exists($this, $method) ) {
    $this->{"{$method}"}($para);
   }else{
    //없는 메소드 호출 처리
   }
  }else{ //ajax가 아니면

   $this->load->view("/common/header");
   if( method_exists($this, $method) ) $this->{"{$method}"}($para);
   $this->load->view("/common/footer");
   $this->output->enable_profiler(true);

  }

이걸 찾고 계신가요?
한대승(불의회상) / 2015/09/09 10:07:29 / 추천 0
$this->output->enable_profiler(false) 로 바꿔주는 센스.. ^^
kaido / 2015/09/10 08:55:12 / 추천 0
제가 지금 개발 모드 중인지라 일괄적으로 넣어 놨지요 ㅎㅎ

프로파일러는 선택적으로 보이게 해놓으시면 개발에 유용해요.
[특히 쿼리 랑 파라메터 확인 할때]
한대승(불의회상) / 2015/09/10 10:00:57 / 추천 0
@kaido 디버깅에 정말 편리하죠.. ^^
IamMonk / 2015/09/10 21:54:13 / 추천 0
답변 감사합니다!
IamMonk / 2015/09/10 21:56:37 / 추천 0
    public function _remap($method, $params = array())
    {
        $this->load->view('header');        
        if (empty($params)) {
            if(method_exists($this, $method)) $this->{"{$method}"}();
        }
        else
        {
            if( method_exists($this, $method) ) $this->{"{$method}"}($params);
        }
        $this->load->view('footer');
    }
        
    public function get_pm_detail($purchase_id = NULL)
    {
        //$purchase_id = $this->uri->segment(3); -> no longer need this hiccop!
        if (empty($purchase_id) == TRUE)
        {
            //redirect('/isewanpm/');
            echo "NO FUNCTION ARGUMENT!";  // debugging message before putting real code.
            exit;
        }
        var_dump($purchase_id);  // make sure variable type and value
        echo $purchase_id[0];
IamMonk / 2015/09/10 21:57:21 / 추천 0
이렇게 응용하니 문제가 쉽게 풀리더군요.
도움이 많이 되었고 감사합니다.
한대승(불의회상) / 2015/09/11 10:07:24 / 추천 0
전달받는 인자 값이 여러개 일때는
 
call_user_func_array(array($this, $method), $params);
를 사용 하세요. 
IamMonk / 2015/09/11 11:17:31 / 추천 0
감사합니다. 좋은 참고가 되었습니다.
Intranet system이라 SEO이 필요치 않아서 함수 인자로 넘기는 방식으로 개발을 했던건데, 사실 Form POST로 넘기는게 오랜 시간 사용했던 방식이라 가장 다루긴 편합니다만 CI를 공부하면서 _remap덕에 좀 더 공부가 되었네요. 또 모르는게 있으면 도움 절실히 받겠습니다. 잘 부탁드립니다.