CI 묻고 답하기

제목 route 설정이 문제인지 코어확장 문제인지, 고수님 도와주세요.
글쓴이 작성시각 2015/08/18 13:31:20
댓글 : 10 추천 : 0 스크랩 : 0 조회수 : 15920   RSS
안녕하세요.
마나보드를 가지고 확장해서 새로운 관리자를 만들고 있습니다.

마나 보드에 보면
Router 코어를 확장해서 수정한 부분이 있는데요

/* CI 2.2.0
2차 폴더 접근까지 가능하도록 수정
*/
class MY_Router extends CI_Router {

이부분이요.
hm/auth의 주소로 접속시
controller hm폴더의 auth.php를 호출하는데요

gm/auth로 접속해도 같게 동작하기를 원합니다

$route['gm']="hm";
//$route['gm/(:any)']="hm";
//$route['gm/(:any)'] = "hm/$1";

이런식으로 설정해보았습니다만, 

설정이 잘못인지 아니면 코어 확장 탓인지 제가 원하는 방식으로 동작하지 않습니다.

어떻게 하면 되나요?
 다음글 Model 에서 데이터를 불러온 후에, 페이지 이동 시... (1)
 이전글 mysqli 연결 도중에 오류가 발생했습니다. (1)

댓글

/ 2015/08/18 13:40:31 / 추천 0
$route['gm/auth/(:any)']="hm/auth";
이런식으로 하니 원하는 결과를 얻긴 했는데

$route['gm/company/(:any)']="hm/company";
           .
           .
           .
이런식으로 계속 설정을 해나가야 해서 혹시 설정법 있을가요?
한대승(불의회상) / 2015/08/18 13:46:45 / 추천 0
$route['gm/(:any)/(:any)']; 로 설정해 보세요.
/ 2015/08/18 13:58:57 / 추천 0
//불의회상
답변 감사합니다.
$route['gm/(:any)/(:any)']="hm"; << 이렇게 맞나요?
설정해도 원하는 결과를 얻지 못했습니다 ㅠ_ㅠ

결과가 2번째 세그먼트만 변경되는건데 쉽지 않네요.
 
한대승(불의회상) / 2015/08/18 14:50:29 / 추천 0
@닉 마냐님 라우팅 로직을 분석해 보셔야 할 듯 싶네요.
CI의 라우팅은 컨트롤러 폴더 아래 1단계 까지만 지원하고 있어서 임의로 수정한 경우 원하는 결과가 나오지 않을 수 있습니다.
/ 2015/08/18 15:20:36 / 추천 0
//불의회상
다른 어플리케이션에서 테스트해보니
제가 원하는대로 되려면 라우팅 로직을 확장 수정하지 않은 경우
$route['gm/(:any)']="hm";
로 원하는 결과를 얻을 수 있는 결과를 얻었습니다.
불의회상님 말씀대로 라우팅부분을 분석해보려고 해도 코어부터 확인을 해야 하는데 능력부족입니다 ㅠ_ㅠ
아무래도 포기하고 다른방법을 찾아야 할 거 같습니다.

도움주셔서 감사합니다.
하늘치 / 2015/08/18 15:25:41 / 추천 0
아래의 가이드 내용을 보시면 아시겠지만, route 설정은 그닥 유연한 편은 아닙니다.
http://cikorea.net/user_guide_2.1.0/general/routing.html

 

hm/auth의 주소로 접속시
controller hm폴더의 auth.php를 호출하는데요

gm/auth로 접속해도 같게 동작하기를 원합니다


/hm/auth 그리고 /gm/auth 모두 뒤에 이어지는 세그먼트가 없다면,
$route['gm/company']="hm/company";
이렇게만 하면 될겁니다.



그런데, 만약 뒤에 이어지는 세그먼트가 하나라도 있다면 늘어나는 세그먼트 숫자만큼 설정을 추가해줘야 합니다.
$route['gm/company/(:any)/(:any)/(:any)']="hm/company/$1/$2/$3";
$route['gm/company/(:any)/(:any)']="hm/company/$1/$2";
$route['gm/company/(:any)']="hm/company/$1";
$route['gm/company']="hm/company";

주의하셔야 할 것은 설정 순서입니다.
Note: 라우팅 설정은 상위에 설정된것이 하위에 설정된것보다 우선실행됩니다.

아래처럼 순서를 반대로 설정하시면 아마 원하시는 결과가 안나올꺼에요... 아마도요 ㅎㅎ

 
$route['gm/company']="hm/company";
$route['gm/company/(:any)']="hm/company/$1";
$route['gm/company/(:any)/(:any)']="hm/company/$1/$2";
$route['gm/company/(:any)/(:any)/(:any)']="hm/company/$1/$2/$3";


/ 2015/08/18 15:37:31 / 추천 0
//하늘치
위와 같이 설정했을 시 번거롭게 무한 작업을 해야해서 정규식이라던지를 내심 기대했는데 방법이 없는거 같습니다 흑흑..
도움주셔서 감사합니다.
/ 2015/08/18 15:54:24 / 추천 0
처음 계획은
hm (호스트매니저) 로 접속해서 gm (게스트매니저)을 생성하는 형식으로 만드려고 했으나,
두매니저(관리자라고 보시면되요.) 사이에 동일하지만 권한에 따라 보이고 안보이고하는 식의 구현을 할려고 생각하니
컨트롤러를 복사해서 사용해야하는 이슈가 생겨서 위와같이 라우팅으로 풀어보려했으나, 능력부족으로 인해
다른 방법을 모색하고 있습니다.
예를 들어 블로그라고 치면, 회원가입을 하면 회원들에게 블로그 관리자가 생성되잖아요.
그럼 그걸 관리하는 마스터 관리자가 있을건데, 그 마스터관리자와 노예관리자를 만들고 있습니다.
혹시 경험 많은 고수님들은 어떤식으로 구현하시나요?
/ 2015/08/25 14:12:45 / 추천 0
안녕하세요
오랜만에 글 남기네요.
이부분은 게스트와 호스트 관리자를 통합하고 권한부분을 계정별로 마련하는걸로 해결했습니다.
seamusic / 2021/06/02 16:23:32 / 추천 0

Router 코러 확장 한 파일에서 _validate_request  함수에서 

디렉토리와 파일 존재 유무를 체크 하는 부분이 있습니다. 

gm 으로 들어왔을때 hm 으로 강제 전환 하도록 하면 됩니다.