CI 묻고 답하기

제목 컨트롤러 내 공통부분 빼기 질문입니다ㅜ
카테고리 CI 2, 3
글쓴이 소연신 작성시각 2017/03/07 09:26:22
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 15256   RSS

며칠전에 질문드렸었는데..

 

단순한 공통부분은 컨트롤러 내에서 함수로 따로 빼서 잘 사용했습니다.

 

바보 같은 질문일 수 있는데

 

$board_type = $this->input->post('type', true);

if($board_type == 'free' || $board_type == 'best' || $board_type == 'humor' || $board_type == 'photo' || $board_type == 'tip')        

{            

$table = 'community';      

 }        

else if($board_type == 'notice')        

{            

$table = 'notice';      

 }

 

그런데 이런 건 안되네요.

저 부분을 공통함수로 빼고 $this->함수명() 이렇게 사용하면 저 $table을 인식 못합니다. return을 해도 안되고.. 게시판 타입에 따라 테이블 명을 뽑는건데 이런 거 어떻게 처리할 수 있나요ㅜ

 다음글 constants 보안문제. (2)
 이전글 Database 라이브러리 로드시 서버 동작 하지 않습... (6)

댓글

한대승(불의회상) / 2017/03/07 10:09:07 / 추천 0
공통함수는 어떻게 만드셨나요?
kaido / 2017/03/07 10:12:47 / 추천 0
var_dump($board_type);

공통 함수에서 값 확인해 보세요. 값이 안들어가 있을 것입니다.

 

2가지 방법이 있습니다.

생성자안에 넣고 $this->board_type    객체로 접근.

 

$this->함수명($board_type); 

으로 인자값으로 넘겨주기.

 

게시판 이름별로 구분을 주실거면 그냥 세그먼트에 넣고, 세그먼트 기준으로 _remap() 적용 하셔도 됩니다.

소연신 / 2017/03/07 11:32:57 / 추천 0

@한대승

저 내용이 함수 내용이에요ㅜ

@kaido

위에 저 내용으로 함수를 만들면 값은 못받고.. $board_type = $this->input->post('type', true); 이거는 기존 함수에 냄겨두고 밑에 조건부 부분만 빼서 하면 board_type, table 값 다 나옵니다. 근데.. 그 값을 기존 함수에서 인식을 못합니다.

 

 

function comcom($board_type)
    {
        if($board_type == 'free' || $board_type == 'best' || $board_type == 'humor' || $board_type == 'photo' || $board_type == 'tip')
        {
            $table = 'community';
        }
        else if($board_type == 'notice' || $board_type == 'qna')
        {
            $table = 'notice';
        }

        return $table;
    }
    /*
    * 게시글 리스트
    */
    function board_lists_ajax()
    {
        $board_type = $this->input->post('type', true);
        $this->comcom($board_type);

        $board['lists'] = $this->Board_m->get_board_lists(
            array(
                'table'=>$table,
                'type'=>$this->input->post('type', true),
                'subtype'=>$this->input->post('bstype', true),
                'skip_num'=>$this->input->post('skip_no', true),
                'list_max'=>$this->input->post('list_max', true)
            ));

        echo json_encode($board);
    }

일단 이렇게 해봤는데 밑에 board_lists_ajax()에서 $table을 인식못하거든요. 뭘 잘못했나요ㅜ 리턴을 안해도 안되고 해도 안되고.. $table을 따로 어디서 선언 해놔야 되는건지..생성자에선 안되구요ㅜ

kaido / 2017/03/07 11:53:38 / 추천 0

$table = $this->comcom($board_type);

 

받아오셔야죠 ㅎㅎ

 

추가 팁으로

function comcom($board_type) 이거를 function _comcom($board_type)  이렇게

$this->comcom($board_type); 이거를   $this->_comcom($board_type); 이렇게

 

하시는 편이 좋습니다.

외부에서 접근하지 못하는 내부 함수 라는 표시 입니다.

만일 누가 /board/common  이렇게 강제로 접근하면 이상한걸 보여주겠지요? ^^

한대승(불의회상) / 2017/03/07 12:30:41 / 추천 0

라이브러리나 헬퍼로 분리해서 만드신건가요?

아니면 모델이나 컨트롤러에 분리해서 만드신건가요?

소연신 / 2017/03/07 14:15:03 / 추천 0

@kaido

아ㅜ ㅋㅋㅋㅋㅋ 어이가 없네요 받아오지도 않고 쓰겠다고ㅜㅜ 감사합니다!

 

@한대승

컨트롤러 내에서 따로 분리한거 였습니다. kaido님 말씀대로 하니 잘 되네요.

 

근데 이거 만약에 다른 컨트롤러에서도 사용한다면 헬퍼로 빼서 사용해야 될까요? ....my_컨트롤러에 넣으니까 잘 되네요 ㅋㅋㅋ 점심먹고오느라ㅜ 답변 늦어 죄송합니다. 고맙습니다!