CI 묻고 답하기

제목 uri에 대해서 문의드립니다.
글쓴이 온더탑 작성시각 2014/08/04 15:55:05
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 17144   RSS
app/weshop/  - root 입니다.(서버 루트아래에 app/weshop 이라는 폴더명을 base_url로 설정했습니다.

controller/특정 폴더들로 구성되어있습니다.

ex)
controller/text1/index.php
controller/text2/index.php,.... 기타등등

pplication/config/routes.php 에서 설정한 $route['default_controller'] = 'Index';

여기서 application/controller/test1 이라는 폴더가 있다면

질문1. app/weshop/test1 이라고 주소를 입력면 app/weshop/text1/Index 컨트롤러가 실행되야 하는게 아닌가요.

현제 저렇게 세팅해놓고 테스트하면 파일을 찾을 수 없다고 404에러가 납니다.

질문2. 기본 컨트롤러를 라우터에서 Index로 설정해 놓으면 해당 폴더 밑에 컨트롤러가 존재하지 않을 경우
          Index폴더 밑에서 함수를 찾는게 맞는지요.
          아래처럼 test1폴더가 있고 url주소를 app/weshop/test1/view 라고 넣는다면
          실제 test1밑에 view클래스가 없으므로 Index 클래스에서 view 함수를 찾는지 알고싶습니다.
          만약 view 클래스가 있다면 view를 실행할거같은데요 없을때 Index클래스 기준으로 함수를 찾는지요.
 
ex)
application/controller/test1/index.php
application/controller/test1/list.php







 
 다음글 wget으로 login 세션 유지하기 (1)
 이전글 컨트롤러 -> 뷰 데이터 넘기기 질문입니다! (5)

댓글

변종원(웅파) / 2014/08/04 16:15:55 / 추천 0
app/weshop/ <- root라고 하셨으니 app/weshop은 주소와는 아무 관계가 없습니다. a.com 으로 접속하면
app/weshop의 index.php가 실행되겠죠.

매뉴얼 다시 읽어보시기 바랍니다. routes.php의 default_controller와 컨트롤러 내부의 index() 함수에 대해.... ^^
온더탑 / 2014/08/04 16:18:43 / 추천 0
아 설마 http://www.codeigniter-kr.org/user_guide_2.1.0/general/routing.html
라우팅 처럼 모든 폴더에 대해서 매핑을 해야하는 건가요.
첫번째 인자를 폴더로 두번째 인자를 클래스로 세번째 인자를 함수로 네번째 인자를 파라미터로 바꾸고 싶은거고
해당 폴더안에 클래스가 존재 하지 않을 시 디폴트 클래스를 Index로 설정해 놓고 해당 클래스의 함수를 이용하고 싶은건데 ...
레퍼런스 내용대로라면 그대로 모든 폴더에 매핑을 해야하는 사태가..
변종원(웅파) / 2014/08/04 16:23:09 / 추천 0
원하는대로 쓰시면 되는데 디렉토리의 root 개념을 헷갈리셔서 그런겁니다.

app/weshop이 컨트롤러에 있다면 주소와 상관이 있습니다만 app/weshop/application/controller 이렇다면
인터넷 주소와는 아무 상관이 없는 겁니다.

controllers/app/weshop.php 라고 파일이 있어야 a.com/app/weshop 이라고 접속이 되는거죠.
좀 되신거 같은데 아직 주소와 uri를 헷갈리시면..... ^^;

그리고 위와 같이 a.com/app/weshop이라고 쳤을때 에러가 나지 않고 실행이 되려면
weshop.php 컨트롤러 내부에 index() 함수를 만들어둬야 하는거구요. (다 매뉴얼에 있는 내용입니다)

default_controller는 a.com 이라고 쳤을때(컨트롤러명을 지정하지 않았을때) 처음 실행되는 컨트롤러를
지정해놓은 겁니다. 그래야 에러가 안나겠죠. 그 컨트롤러안에 index()함수가 있어야 하구요.
온더탑 / 2014/08/04 16:30:40 / 추천 0
웅파님 답변 감사합니다.

$route['default_controller'] = "Welcome"; 값이 사이트 전체에 유일한 값이 아닌 폴더에도 적용이 되는지 알았습니다.
a.com/view/test라 하면 a.com view 컨트롤러 폴더에 test 클래스가 없을 경우 view폴더 밑에 Welcome 파일을 찾고 그안에 test 함수를 실행하고 싶은건데 이건 안되는건가 보네요.




 
변종원(웅파) / 2014/08/04 16:41:07 / 추천 0
default_controller는 디렉토리 하위마다 적용되는게 아니라 한개만 지정하는 겁니다.

말씀하신대로 하려면 routes.php에서 해당 디렉토리들을 모두 넣어줘야 하구요.
온더탑 / 2014/08/04 16:54:09 / 추천 0
웅파님 답변 감사합니다.

네 2번 리플대로 다 매핑하고 있습니다.

왜 이런 질문을하게 되었는지 이해가 안가실거 같아서 추가로 설명드릴게요.
현 사이트 기준으로 리스트 페이지, 뷰페이지, 쓰기 페이지 가 다음과 같이 되어있습니다.
/qna/lists/page/1
/qna/view/13964/page/1/
/qna/write/0
위 주소를 보면 qna는 컨트롤러고 lists,view,write는 qna 컨트롤러 안에 속해있는 함수명인데요.
컨트롤러 밑에 하위 폴더로 구분되어 있어서 같은 구조라면 qna는 폴더가 됩니다. lists,view,write는 컨트롤러가 될거고
그럼 3개의 파일이 생성되어야 합니다. 이걸 웅파님 구조처럼 함수롤 사용하려면 하나의 파일을 만들고 거기에 함수로 넣어야
할거고 그렇게되면 qna/main/lists , qna/main/view, qna/main/write 처럼 주소가 나올거라서
default_controller가 만약 폴더에 지정된다고 한다면 qna/view, qna/wirte 처럼 주소가 나올 수 있을거 같아서 문의 드렸습니다.
만 지금 매핑을 하고있네요.. default_folder_controller 같은 옵션이 있었더라면 하나하나 매핑을 안해도 되었을 텐데요 ㅠ_ㅠ

응 만들까...요
변종원(웅파) / 2014/08/04 17:21:40 / 추천 0
Routes.php 확장하시면 될겁니다. 
_set_default_controller() 함수에서 디렉토리가 있을 경우 그 디렉토리를 포함하도록
수정하면 됩니다. ^^
온더탑 / 2014/08/04 17:31:23 / 추천 0
앗 감사합니다. ^^
온더탑 / 2014/08/04 18:34:50 / 추천 0
앗 이분은 플래시 개발때부터 유명하셧던 제가 원하는걸 잘 설명해 주셨네요.
후에 다른 분이 이와같은 일이 생겼을 때 참고하시라고 링크 남겨 놓습니다.
http://blog.bsidesoft.com/?p=939
[해당되는 컨트롤러가 존재하지 않는 경우의 처리] 이 부분이 제가 원하는 부분이네요 ^^