만들면서 배우는 CodeIgniter Q&A

제목 게시판에서 uri->segment(3)이 정의되지 않습니다.
글쓴이 yjin 작성시각 2013/08/22 22:53:43
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 12508   RSS
안녕하세요? 
게시판 프로젝트에 막히는 부분이 있어서 예제 소스코드를 다운받아서 돌려봤습니다.

그런데 처음 나오는 리스트 페이지에서 글 목록을 클릭하거나, 페이지를 옮기거나 (페이지네이션), 
글쓰기를 눌렀을 때 에러가 발생합니다.

원인을 확인해 본 결과 uri->segment(3)를 불러오지 못해서 url부분이 
view//board_id/10/page/1 이런식으로 슬래쉬 사이에 값이 안들어옵니다.

결론적으로 질문드리고 싶은 것은 아래 두가지 입니다.

1. 일단 임시로 uri->segment(3, 'ci_board') 로 입력해두니까 작동은 잘 되던데 왜 테이블 명을 못불러오지 못하는 걸까요?

2. 혹시 코드를 수정해야 한다면, uri 세그먼트의 처음값을 할당하는 코드가 어디에 있는지도 알려주시면 큰 도움이 될 것 같습니다 


웅파님 덕분에 열공하고 있습니다 :) 
감사합니다. 

 다음글 CHAPTER 4 그림 4-1 (Page 91) (1)
 이전글 게시판 중 session 관련 문의 (6)

댓글

변종원(웅파) / 2013/08/22 23:21:43 / 추천 0
주소를 어떻게 하셨는지 올려주세요.

세번째 세그먼트가 없는건 아닌지요?

localhost/index.php/controller/method/var/1

index.php segment 0
controller 1
method 2
var 3
1 4

이렇게 됩니다.

다른 세그먼트 값은 잘 나오는지요?
변종원(웅파) / 2013/08/22 23:22:42 / 추천 0
1번 질문처럼 세그먼트에 두번째 파라미터를 주셔서 ci_board 라는 값이 나왔다면
주소에 세번째 세그먼트가 없는겁니다.
주소를 잘못 치신거 같아요.
yjin / 2013/08/23 01:05:35 / 추천 0
빠른 답변 감사드려요

처음 접속했을 때 브라우저 창 url에는 
http://localhost/bbs/board 
로 나오고, board를 안치면 welcome 메시지가 나옵니다. (bbs는 폴더 이름입니다)

view 창으로 넘어갔을 때는
http://localhost/bbs/board/view/ci_board/board_id/11/page/1
메서드, 변수까지 잘 나오는 걸로 봐서, 말씀하신대로 세번째 세그먼트가 없는것 같습니다.

페이지네이션 버튼으로 이동한 후에는 url이 잘 나오는 걸로 봐서,
첫번째 접속에서만 정보를 못받는 것 같습니다.

아무리 찾아봐도 첫번째 주소를 할당하는 곳이 어딘지 모르겠네요 ㅜㅜ
주소를 어디에서 고칠 수 있나요?





변종원(웅파) / 2013/08/23 10:34:48 / 추천 0
주소를 덜 치신게 맞습니다.

잘 생각해보세요. 게시판 리스트에 접속할때
기존 방식이라면 a.com/board.php?table=ciboard&method=list 이렇게 합니다.
ci의 주소체계에서는  a.com/board/list/ciboard 이렇게 하는거죠.

http://localhost/bbs/board 라고만 치면 어떤 게시판인지 어떻게 알까요? ^^

책 보시면 주소가 http://localhost/bbs/board/lists/ci_board/ 라고 나와있습니다.

책 구조상 todo, bbs, sns 프로젝트를 각각의 디렉토리에 나눠놔서
bbs는 게시판 프로젝트의 디렉토리이고 
board는 컨트롤러
lists는 메소드(함수)
ci_board는 게시판명을 나타냅니다. (책에도 명시)

ci라고 기존 php와 완전 다른 무언가가 아닙니다. 주소의 형태가 쿼리스트링 방식에서
검색엔진 친화적이고 사용자가 알아보기 쉬운 방식으로 바뀐 것과 mvc패턴이 적용된 것!
이게 가장 큰 다른 점입니다.

주소형태가 바뀌었다고 해서 내용이 바뀌는 것은 아닙니다. 위에 적었듯이 기본적으로 있어야 하는 것은
동일합니다.

처음부터 http://localhost/bbs/board/lists/ci_board/ 로 접속하세요.
yjin / 2013/08/23 11:12:23 / 추천 0
브라우저에 url을 타이핑할 때 부터 메서드/변수 까지 쓰는 것이었군요..ㅎ
인덱스페이지로 접속하면 미리 설정된 인덱스 함수(=lists)가 돌아가는 것이라고 생각해서 헷갈렸네요.

자세한 설명 감사합니다. 이제 잘 되요 :)