TIP게시판

제목 (수정) CI2.X 라우팅룰이 CI 3.0에서 동작 하지 않을때
글쓴이 한대승(불의회상) 작성시각 2015/04/02 08:58:14
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 12638   RSS
한대승(불의회상)
CI 3.0에서 라우팅 로직이 변경되었습니다.
핵심 소스코드를 살펴 보면 :any 와 :num 치환하는 부분이 아래 처럼 바꼈습니다.
 
// CI 2.2
$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));

// CI 3.0
$key = str_replace(array(':any', ':num'), array('[^/]+', '[0-9]+'), $key);


이것이 버그인지 의도 한 것인지 모르겠지만 라우팅에 문제가 생겼습니다.
예를 들면

config/route.php
$route['edit/(:any)'] = 'rtest/index';
$route['edit'] = 'rtest/index';
2.2 에서는 위 코드를 config/route.php에 추가 하고
www_example_com/edit
www_example_com/edit/1
www_example_com/edit/1/2
www_example_com/edit/1/2/3
위와 같이 하면 rtest/index 로 라우팅이 됩니다.

하지만 3.0 에서는 위 코드 추가시
www_example_com/edit
www_example_com/edit/1

// 여기서 부터 에러가 남
www_example_com/edit/1/2
www_example_com/edit/1/2/3
첫번째 인자만 유효하게 처리하고 나머지 인자는 404페이지 에러로 처리 합니다.

2.2가 버그인지 3.0이 버그인지 잘 모르겠네요.

3.0에서 2.2 처럼 라우트를 사용하고 싶다면 (:any) 대신 (.+) 로 바꿔 주시면 됩니다.
// $route['edit/(:any)'] = 'rtest/index';
$route['edit/(.+)'] = 'rtest/index';
$route['edit'] = 'rtest/index';
 다음글 ci 개발 앱? Bonfire (1)
 이전글 크롬 개발팁 하나 (캐시 비우기 및 강제 새로고침) (9)

댓글

Siam / 2015/04/02 09:04:22 / 추천 0
일단 좀 지켜봐야겠네요!
유마 / 2015/04/02 11:57:24 / 추천 0
포럼에 가서 물어보면 왜 바뀌었는지 대답은 해줄텐데...... 울렁울렁 거리더라고요... -_-a
변종원(웅파) / 2015/04/02 12:28:21 / 추천 0
유마/ 2 -> 3 문서에 보면 비정상(?) 사용이라 바꿨다고 합니다. ㅎㅎㅎ
Siam / 2015/04/02 17:45:24 / 추천 0
@변종원 갑자기 궁금한게 생겼는데, 2에서 사용하던 인자전달방식(주소 뒤에 덧붙여서 사용)이 잘못된거면
3버전에서는 여러 인자전달할때는 어떤식으로 사용해야 되는걸까요?;;
변종원(웅파) / 2015/04/02 23:53:17 / 추천 0
Siam/ 인자전달방식이 잘못된게 아니라 라우팅 파일에서 규칙 이야기 입니다.