CI 묻고 답하기

제목 컨트롤러 사용에 관한 질문입니다. 고수님들 댓글 좀^^;;
글쓴이 용준(쭌) 작성시각 2013/09/03 16:49:07
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 12996   RSS
안녕하세요
초급 개발자 입니다.

컨트롤러를 사용하는데에 있어서 궁금한게 있어서 몇 가지 질문을 드립니다.

현재 URL구조를 보면
~~~~~.com/shop/~~/~~ 이렇게 되어있습니다 (index.php는 생략했습니다).
당연히 shop이라는 컨트롤러를 생성했습니다.

페이지 작업을 하다가
~~~~.com/list/!!/!!로 페이지를 이동하고 싶은데요
여기서 몇 가지 질문이 있습니다.
1.
shop컨트롤러에서
if($this->uri->segment(1) == 'list'){
   $this->load->view('~~~~');
}
를 호출할 수 있는지요

2. 즉, List라는 컨트롤러를 생성하지 않고도 Shop이라는 컨트롤러에서 위의 방법을 사용하여
~~~~~.com/list/!!/~~ 이러한 형식의 URL구조를 사용하는게 가능한지 여쭙고 싶습니다.

3.URL라우팅을 제외한 방법을 알려주시면 감사하겠습니다^^
4. Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.
    위와 같은 에러가 발생합니다.

5. 제가 만들 소스의 일부입니다.

public function _remap($method, $params = array())
    {
        $this->Server_Current_Class = $this->uri->segment(1);
        $this->Server_Script_Name   = '/'.$this->Server_Current_Class.'/'.$method.'/';
        $this->Server_Query_String  = (($_SERVER['QUERY_STRING']=='') ? '' : '?'.$_SERVER['QUERY_STRING']);
       
        //------------------------------------------------------------------ [Skin]
        $data['Skin_Header']   = $this->load->view('skin/Shop_Header','', TRUE);
        $data['Skin_Login'] = $this->load->view('skin/Shop_Login', '', TRUE);
        $data['Skin_Footer']   = $this->load->view('skin/Global_Footer', '', TRUE);
           
        if($this->uri->segment(1) == 'list'){
            $data['Skin_Content']  = call_user_func_array(array($this, 'fn_ShopInfo'), $Shop_No);
            $this->load->view('skin/Shop', $data);
        }     
       
        // Method가 있으면 해당 함수 실행
        if (method_exists($this, 'fn_'.$method))
        {
//            //-------------------------------------------------------------- [Model]
//            $this->load->model($this->Server_Current_Class.'/geolocation');
//            $data['arrRtn'] = $this->geolocation->getData();
           
//            $data['Skin_Header']   = $this->load->view('skin/Shop_Header', $data, TRUE);

            $data['Skin_Content']  = call_user_func_array(array($this, 'fn_'.$method), $params);
            $this->load->view('skin/Shop', $data);
        }
        // Method가 없으면 업소정보 화면 실행
        else
        {           
            // 두번째 세그먼트가 없으면 화면 없음
            if (is_null($this->uri->segment(2)) OR strlen($this->uri->segment(2)) == 0)
            {
                show_404();
            }
            // 두번째 세그먼트가 있으면 업소정보
            else
            {
                $Shop_No = $this->uri->segment(2);

                $data['Skin_Content']  = call_user_func_array(array($this, 'fn_ShopInfo'), $Shop_No);
                $this->load->view('skin/Shop', $data);
            }
        }




 다음글 세션 만료시간을 갱신하는법이 없을까요? (5)
 이전글 tank auth의 username 과 user_id (2)

댓글

변종원(웅파) / 2013/09/03 16:59:08 / 추천 0
ci 제어권안에서 라우팅 제외하고 방법이 있을까요?

무슨 작업을 하려는지 더 자세하게 올리시면 더 나은 답변을 받으실 수 있을 것 같네요.

단순히 주소이동을 하려는건지, 다른 컨트롤러를 불러 사용하려는 것인지 의도파악이 안되서요.

1. shop컨트롤러면 세그먼트 1번이 shop이겠죠. 작동 안합니다.
2. shop컨트롤러에서 왜 가상의 list 컨트롤러를 호출하려는지 알아야 정확한 답변이 가능합니다.
3. 존재하지 않는 컨트롤러를 있는 것처럼 사용하려면 라우팅해야합니다.
4. routes.php안에 default컨트롤러를 선언하는데 그 파일조차 없을때 나오는 에러입니다.

용준(쭌) / 2013/09/03 17:11:34 / 추천 0
단순하게 말씀드리면

검색 버튼을 눌렀을 때, 
~~~~~.com/list/검색어로 이동하고 싶은 것입니다.

그치만 위의 URL로 이동을 한다는 의미는 list 컨트롤러를 사용해서 이후 작업을 처리해주겠다는 의미인데
업무에서 요구는 위의 1번과 같은 방법을 원하고 있는 것 같습니다.

라우팅 밖에는 방법이 없군요
용준(쭌) / 2013/09/03 17:12:45 / 추천 0
한가지 더 적어보면 class List extends~~ 는 선언이 안되는 것 같더라구요
변종원(웅파) / 2013/09/03 17:14:30 / 추천 0
list는 예약어입니다.
용준(쭌) / 2013/09/03 17:17:46 / 추천 0
웅파님 그렇다면 결국

~~~~.com/shop/!!
~~~~.com/info/!!

이 두개의 URL사용을 위해서는
shop과 info 컨트롤러가 각각 따로따로 있어야 하는 것이죠??
한대승(불의회상) / 2013/09/03 17:49:04 / 추천 0
용준(쭌)/ route를 사용하면 하나로 처리 가능 합니다만....
변종원(웅파) / 2013/09/03 18:19:53 / 추천 0
용준(쭌)/ 라우팅을 안한다는 전제하에서 따로 만들어야 합니다.
용준(쭌) / 2013/09/03 18:37:28 / 추천 0
한대승(불의회상)/ route를 사용하면 가능하군요 공부를 좀 더 해봐야겠네요
양승현 / 2013/09/05 08:41:59 / 추천 0
route를 사용하면 특정 또는 전체 url에 대해 컨트롤러를 강제로 지정할수 있겠죠. 근데 shop>lists로 url이동시 같은 컨트롤러인데 세그먼트1의 값이 달라지는건 비추 입니다. 세그먼트값(컨트롤러/메소드) 형태로 쓸때 url을 보고 컨트롤러를 찾고 메소드를 찾는게 편한데 그걸 임의로 돌려 감추면 다름사람들이 해당 소스를 찾고자 할때 멍때릴수 있어요 ^^