제목 | 기본적으로 컨트롤러 이름이 유동적일 수 있나요? | ||
---|---|---|---|
글쓴이 | 독감 | 작성시각 | 2011/03/23 23:15:16 |
|
|||
아무리 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
|
변종원(웅파)
/
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를 판단해서 호출되는 객체와 함수명을 판단 했습니다. 이렇게 작업 하고 매치박스 라는게 있다는걸 알았지만 말이죠 -_-; 이런 방법도 있다고 말씀을 드립니다 =) |
1) redirect
- 각 유저별로 접속되어야 하는 컨트롤러 URL로 리다이렉트하여 처리합니다.
2) library
- 컨트롤러는 그대로 놔두고 각 유저별로 library를 분기시켜서 처리합니다.
대략 위 2가지 방법이 있지 않을까.. 생각되네요~