CI 묻고 답하기

제목 기본적으로 컨트롤러 이름이 유동적일 수 있나요?
글쓴이 독감 작성시각 2011/03/23 23:15:16
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 18760   RSS
 아무리 route를 활용한들 도저히 길이 안보여 질문 올립니다.

제 URI는 /user/(username)/controller/blah-blah/blah

이런식으로 갑니다.

즉 controller 앞에 user/(username)이 붙어있는거죠. 이거까진 route로 쉽게 할 수 있는데,

controller가 지정된 컨트롤러 이름이 아닙니다. 무슨소린고 하면,



컨트롤러 a,b,c,d가 있다 하면,

이 것들은 user/(username)/a/method 이런식으로 쓰이는게 아니고

user/jiyum/play 이런식으로 쓰이고, play가 어떤 컨트롤를 포인트 하고 있는지는 jiyum이란 유저의 개인정보(?)에 기반하는 그런거죠..

한마디로 컨트롤러가 들어오기 전에 DB를 읽어야 하고 그 읽어진 내용을 기반으로 $route를 변조해야 하는데 이게 CI 구조상 불가능 해 보여서요.

DB는 직접 코어나 라이브러리에 쓰지 않는 이상 헬퍼로밖에 접근이 안되고 (직접 쓰게 되면 DB를 두번 열고 닫는 꼴이 되고)

$route는 routes.php에서만 변조가 가능하니까요. 왜냐면 컨트롤러 클래스가 로드 되는 시점에서 이미 변조 할 포인트는 지났으니까요... 구조상 말이죠.

코어를 수정하지 않는 이상 힘들 것 같은데... 아님 의외로 답이 쉽던지...-_-;;

혹시 비슷한 것 구현하신 분 계시면 도움좀 부탁드리겠습니다.

감사합니다.
 다음글 You must use the "set&quo... (2)
 이전글 CI환경에서 노프레임으로 배경음악이 계속 유지되게하려면... (1)

댓글

jois / 2011/03/23 23:39:37 / 추천 0
정확히 어떤걸 원하시는지 알 수 없지만..

1) redirect
  - 각 유저별로 접속되어야 하는 컨트롤러 URL로 리다이렉트하여 처리합니다.

2) library
  - 컨트롤러는 그대로 놔두고 각 유저별로 library를 분기시켜서 처리합니다.

대략 위 2가지 방법이 있지 않을까.. 생각되네요~

변종원(웅파) / 2011/03/24 08:13:42 / 추천 0
변동되는 컨트롤러 주소를 유저가 다이렉트로 접근해야 하는지요? 유저가 직접 접근하지 않고 모든 제어가 웹에 있다면 Hook으로 개인정보를 불러오고 routes.php가 읽혀지기전에 routes.php에서는 변동되는 주소로 대응하게 작성하는게 아니라 무조건 하나의 메소드로 보내주고 그 메소드에서 hook의 값을 기반으로 메소드를 호출하면됩니다. 기본 메소드와 여기서 불러오는 메소드는 같은 컨트롤러안에 위치해야하고, 그렇지않은 경우라면 matchbox같은 것을 이용하셔야 합니다
독감 / 2011/03/24 08:55:30 / 추천 0
답변 감사합니다.

matchbox가 뭔지 정확히 모르고 읽으면서 간간히 들어보기만 했었는데 이게 필요할 것 같네요.
hook으로 하는것도 문제가 되는게 이미 맨 처음에 불러와야 하는 컨트롤러 이름이 유동적이라 hook으로 불러온 정보를 기반으로 제대로된 컨트롤러로 연결시켜주는 router를 따로 짜지 않는 이상 어떠한 메소드로 보내는것이 안되네요.

즉 이렇게 하려면 a,b,c,d 이전에 하나의 컨트롤러가 있고 (예를들면 user) 여기서 처리를 해야 하는데, 이 경우엔 user 컨트롤러에서 username 인풋을 가지고 정보를 가져 와서 다른 컨트롤러로 넘겨주게끔 만들어야 겠네요. 그러려면 알려주신 matchbox같은것이 필요하겠군요.. 음...
변종원(웅파) / 2011/03/24 09:15:01 / 추천 0
전에 개발했던 웹메이커3가 유사한 구조로 되어있습니다.
관리자에서 /intro/biz 라고 메뉴를 만들고 회사소개 페이지로 연결을 했다면
Route와 기본 컨트롤러에서 matchbox를 통해 다른 컨트롤러 호출하였습니다.
(matchbox 를 변경해서 사용)

강의쪽에 보시면 예전에 포럼에서 강의했던 내용이 있습니다.
웹메이커3에 적용된 ci기술이라고 사용자가 만든 임의의 가상 주소를 어떻게 컨트롤로에 매칭을 시키는가에 대한
부분이 있습니다. 참고하세요.
SADBLUE / 2011/03/29 15:25:59 / 추천 0
제 상황과 비슷하신가보군요.
group.hiworks.co.kr/_GROUP_ID_ 이런 경우와
hiworks._DOMAIN_ 이런 두가지 경우가 있어서 저는 걍 재귀호출을 했습니다.

rewrite module에서 group.hiworks.co.kr로 오는 경우는 group_id가 있는 것으로 간주 하고
_remap함수에서
그 뒤에 있는 ULI로 디렉토리와 class, method를 판단해서 호출되는 객체와 함수명을 판단 했습니다.
이렇게 작업 하고 매치박스 라는게 있다는걸 알았지만 말이죠 -_-;
이런 방법도 있다고 말씀을 드립니다 =)