CI 묻고 답하기

제목 URL 라우팅??? 파라미터로 원하는 뷰페이지 보여주고 싶습니다.
카테고리 CI 2, 3
글쓴이 바다의이무기 작성시각 2019/06/27 09:51:08
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 17525   RSS

안녕하세요?? 요새 날씨가 많이 덥네요.

지금 제가 URL의 파라미터로 구분 받아서 원하는 View페이지를 보여주고 싶습니다.

예를 들어서 URL이 http://localhost/test/main/main이면 view는 /test 디렉터리 안에 있는 뷰파일들을 보여주고 

URL이 http://localhost/test2/main/main이면 view는 /test2 디렉터리 안에 있는 뷰파일들을 보여주고  싶습니다.

config디렉터리안에 routes.php파일을 $route['common:any'] 으로 수정해봤는데.. 원하는대로 결과를 가져오지 못하네요.

컨트롤러에서 처리 할 수 있는 방법이 있을까요??

 

 다음글 로그인이 안되요... (5)
 이전글 [COOKIE] 쿠키 사용방법에 대한 질문입니다. (1)

댓글

kaido / 2019/06/27 10:30:59 / 추천 0

uri 기준으로 view 파일을 부른다고 해서 저는 FMVC 패턴이라고 부르고 있습니다. 개인적으로 ㅎㅎ

해당 방법은 2가지 트릭이 필요합니다.

// 우선 _remap

//컨트롤러 시작시에 무조건 참고 한다. 생성자 호출 이후 호출됨
	public function _remap($method)
	{
		$this->segs = $this->uri->segment_array();

		//파일 기준으로 view를 가져온다 
		//주소는 가짜 주소이며, 파일명 기준으로 주소를 불러온다
		//echo $method;
		
		//$php = str_replace(".php", "", $method);
		//$file = $method = str_replace(".html", "", $method);

		//echo $method;
		$filepath = APPPATH."/views/page/".$method;
		//var_dump(file_exists($filepath));		
        
		if(file_exists($filepath)){
			$main_data = array();
			$this->load->view("/page/$method",$main_data);
		}else{
			echo "404 ERROR";
		}
		
	}

 

 

메소드 불러오는 기준으로 메소드 호출할 수도 있고, 해당 메소드 명으로 view 파일을 로드 할수도 있습니다.

아마 찾으시는게 이것일거라 보입니다.

 주석된거 하나씩 풀면서 값을 보시면 금방 조합 하실수 있을것입니다.

 

2번째 트릭.

가칭 FMVC 패턴의 컨트롤러을 1개의 컨트롤러에서 만들어 놓았습니다만 동일한 로직의 컨트롤러를 여러개 만들 필요는 없습니다.

여러개 만들 필요가 없이 1개의 컨트롤러에서 처리가 가능하게 uri 를 속이는 기능이 바로 라우팅 기능입니다.

라우트 에서 미리 사용할 1번째 세그먼트 주소를 나열해서 전부 1개의 컨트롤러로 라우트 맵핑 시키면 원하시는 기능이 만들어질거라 보입니다.

 

라우트에 대해서는 메뉴얼을 보시고 하나씩 테스트 하면서 터득 하시는 수밖에 없습니다.

http://www.ciboard.co.kr/user_guide/kr/general/routing.html

한대승(불의회상) / 2019/06/28 09:14:13 / 추천 0

컨트롤러 클래스 파일을 하나만 만들수 밖에 없는 상황인가요?

그렇지 않다면 test와 test2 컨트롤러 클래스  2개 만드시면 됩니다.

바다의이무기 / 2019/06/28 09:30:40 / 추천 0

kaido님, 한대승(불의회상) 님 답변 감사합니다.

test, test2는  관리자가 디렉터리명 입력해서 디비에 저장하고 저장되어 있는 걸 불러올려고 합니다.

동적이라서 그래서  따로 클래스를 만들 수 없습니다.

제가 생각 한건데  kaido 댓글을 참고해서 _remap 메소드에서 세그먼트로 가져와서 거기에 맞는 탬플릿을 가져오는 방법이 해결방법인것 같습니다. 이따가 퇴근후 작업해봐야겠네요.

답변감사합니다.