CI 묻고 답하기

제목 초보질문
글쓴이 머털 작성시각 2011/07/12 21:28:24
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 20328   RSS
완전초보입니다.
board.php?BID=$name&UID=$uid
board.php라는 모델값에서
변수로 BID와 UID로 받아서 view하려면
어떻게 해야하나요?
뷰까지안가구, 컨트롤러에서 해결할순없는건가요?
board/$name/$uid

class Board extends CI_Controller {
  public function index()
 {
echo"";
}
        public function list($name,$uid){
$this->load->model('wizboard');
//////////////////////////////////////////////////////////////////////////////////////////////view까지 안가구 컨트롤러에서 해결안될까요
}

view페이지가 꼭나와야한다면,,,
어떻게 해야될지,,,,,설명서를 뒤져봐도 모르겟어요




현재 php로  board.php?BID=$name&UID=$uid  이런형식으로 쓰다가
board/$name/$uid  이렇게 쓰구 싶은 상태입니다.
 다음글 데이터베이스 한글이 출력안되는현상 (3)
 이전글 완전초보질문///답변부탁드려영 (4)

댓글

머털 / 2011/07/12 21:34:08 / 추천 0
제가 알구싶은건,,
현재 주소체계가 (board.php?BID=$name&UID=$uid) 이런형식으로 되있는데
board/$name/$uid이렇게 쓰구 싶은겁니다,.,

그래서 모델보드를 만들었는데,,
컨트롤러 작성중에
$this->load->model('board');
여기서 어떻게 (board.php?BID=$name&UID=$uid) 이렇게 변수값들을 넘겨줘야
board/$name/$uid 이렇게 주소가 나올수 있겟는가가 궁굼한 상태입니다..
헛발이 / 2011/07/13 09:49:29 / 추천 0
자신이 원하는 데로 잘 안되죠? ^^; 저도 사실 처음에 기존방식으로 잘 안되서 참 답답하고 그랬던 기억이 막 나니 머털님의 마음이 막 전해 지는군요^^;

일단 머털님이 어느정도의 프레임워크에 대해서 알고 있는지를 잘 모르겠지만..일단 완전 모른다 생각하고 다음을 설명 할테니 참고 하시기 바랍니다..


우리가 지금까지 PHP를 사용해서 프로그램을 짜면 값을 넘기고 넘겨 받고 데이터를 불러오고 화면에 출력하고 하는 일을 했을것입니다. 그것을 간단히 작성해 보면

<a href="./bbs/board_view.php?uid=1">글보기</a>

//이렇게 값을 GET으로 넘겨 주고 받는 쪽에서는 

$uid = $_GET['uid'];
이렇게 작성해서 값을 처리 하곤 했을 것입니다.
이것은 각기 처리 하는 페이지가 모두 다르기 때문에 값을 다른 페이지로 전달 할경우 해당 페이지의 이름 즉 board_view.php라는 곳으로 uid값을 get으로 넘긴다로 해석할 수 있죠..

그런데 프레임 워크는 약간 다른 방식입니다. 처음엔 잘 이해가 가지 않겠지만 프레임 워크는 모든 일은 index.php가 다 합니다. 어떤 콘트롤러를 사용하건 어떤 모델을 사용하건 모든것은 가장 Root에 있는 index.php가 다 하는것이죠. 이해 가시나요?

즉 자신이 만약에 ...
//프레임워크를 사용할 경우

echo anchor('bbs/board_view/uid/'.$id, '글보기');

//위처럼 하게 되면 결과가 <a href="bbs/board_view/uid/">글보기</a>가 됩니다.
?>

이렇게 링크를 하기 되면 실제 bbs라는 콘트롤러의 bbs.php가 링크 되는 것이 아니에요.

다시 말 하면 bbs/board_view/uid/하게 되면 이것을 모두 www밑에 있는 index.php가 모든 값을 접수 하게 됩니다. 그래서 URL주소에 있는 모든 값을 스스로가 해석해서 첫번째 값 즉 bbs의 콘트롤러를 찾게 되고 그 다음의 두번째 값의 board_view라는 메소드 즉 콘트롤러안의 함수를 찾게 됩니다. 그리고 그 이후의 값들 uid와 1이란 값은 3번째 이후의 모든 값은 변수로 인식하게 됩니다.

여기 참조 : http://codeigniter-kr.org/user_guide/general/urls.html

그래서 실제 외부적으로 처리 되는것은 index.php가 모두 처리 하는것이고 내부적으로는 URL을 해석해서 콘트롤러나 모델 뷰 등을 찾아 결과를 만들어 내고 모든 결과물을 index.php에서 출력하게 되는것이죠..

그러니 질문 하신것처럼
board.php?BID=$name&UID=$uid //(x)
이렇게 값을 보낼 수가 없어요.. 만약에 값을 보내려면 이렇게 보내면 안되고
bbs/board/BID/$name/UID/$uid //(o)
이렇게 보내서 처리를 하면 됩니다.
또는 코드이그나이터에서 쿼리 스트링을 사용하시면 이렇게도 가능합니다.
bbs/board?BID=$name&UID=$uid //(o)
이렇게도 가능합니다. 하지만 확장자는 사용할 수 없죠..
이렇게 사용하게 되면 이건 자신이 직접 처리하는 부분을 만들어야 해요. 왜냐 하면 위처럼 하게 되면 세그먼트는
bbs라는 값과 board?BID=$name&UID=$uid 값 두개로 나눠 지기 때문에 실제로 값으로 받아 드릴 수가 없어요..
그러기 때문에 뒷부분 측 ?다음에 값이 있다면 그걸 =으로 분리해서 변수명과 값을 구분지어서 처리 할 수 있는 값으로
해주는 부분을 직접 만들어야 가능합니다.


여기도 함 참조 해보세요. http://codeigniter-kr.org/user_guide/libraries/uri.html

그리고 질문중에 모델보드를 만들었다고 하셨는데.. 그 말이 좀 이해가 안가네요...
게시판을 모델로만 만드셨다는건가요?



즉 다시 한번 정리를 하면 다음과 같습니다.

뷰에서는
$id = 1;
echo anchor('bbs/board_view/'.$id, '글보기');
콘트롤러에서는
class Bbs extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }

    function board_view()
    {
        $uid = $this->uri->segment(3);
        echo $uid;
    }
}
이렇게 한다는것이죠....
헛발이 / 2011/07/13 10:07:44 / 추천 0
질문을 유심히 다시 읽어 보고 다시 읽어 보고 했는데 혹시 이런 구조인가요?

일반 PHP로 된 a.com이라는 사이트에서 board.php?BID=$name&UID=$uid라고 링크를 클릭하면
내가 만든 코드이그나이터의 b.com에서 값을 받아야 하는 상황인가요?

만약에 그렇다면 아마 값을 받기 힘들거에요..100%절대로 안되는건 아니겠지만 만약에 그런거라면 아마 그 부분을 처리 하는 루틴을 만셔야 할거에요...

코드이그나이터는 /(슬레쉬)를 통해서 값을 구분 하기 때문에 board.php?BID=$name&UID=$uid로 값을 받게 되면 이것은 하나의 값으로 간주 하게 될거에요.. 그러니 그 값을 받아 어디까지가 값이고 어디까지가 변수고 파라메타가 몇개가 되는지 자동으로 해석하는 그런 루틴을 만든다면 가능할지 모르지만..

이런 경우라면 그냥 넘겨주는 쪽에서 코드이그나이터에 맞게 넘겨 주시는게 좋을거 같네요...