CI 묻고 답하기

제목 콘트롤러에서 파라메터 값을 넘길 시...
글쓴이 닥스훈트 작성시각 2012/06/05 04:27:56
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 21794   RSS
 아래와 같은 콘트롤러가 있습니다.


function view_site($id='')
 {
  $this->load->model('sites/sites_model');
  $site=$this->sites_model->get_site($id);
  $data['title']="Record view";
  $data['row']=$site;
  $this->load->view('sites/view', $data);
 }

그러면 저 컨트롤러는

http://127.0.0.1/view_site/3

뭐 이런식으로 호출 가능하다는건 알고 있습니다만...

컨트롤러 호출을 이렇게 한다면


anchor('view_site', $row->id)

위 view_site 콘트롤러에서

function view_site($id=''){
라고 된 부분에서 $id 변수의 값에 $row->id 로 읽어진 id 의 값이 들어가게 되는건가요?

view_site($id = '')  와 같이 빈값을 파라메터로 받는 함수(콘트롤러) 정의는 본적이 없어서 말입니다.

 다음글 hmvc에서 모듈 생성할 때 데이터를 넘겨줄려면? (2)
 이전글 간단한 모델에서의 구문 질문. (2)

댓글

변종원(웅파) / 2012/06/05 05:44:07 / 추천 0
echo $id; 해보세요
닥스훈트 / 2012/06/05 08:54:23 / 추천 0
 아.. 감사합니다..

곰곰생각해보니

function
 view_site($id='')

에서 매개변수로 넘어올 id 값이 '' 값으로 초기화했단 이야기군요.

저는 ='' 자체가 뭔가 특별한 의미가 있는건가? 하고 심각하게 생각했었는데

의외로 '' 값으로 초기화한 id 라는 일반적 뜻이었군요.

아.. 너무 깊게 생각해도 안돼.. ㅋㅋ

근데 echo로 찍어도 id값이 안 찍히네요.... 다시 봐야겠어요

pithecus / 2012/06/05 09:47:38 / 추천 0
  function view_site($id='')

$id 매개변수가 없을 경우 '' 로 디폴트 값을 넣어준다는 의미로 보는게 맞을것 같습니다.

http://kr.php.net/manual/en/functions.arguments.php 에서 default parameter 를 참고하셔도 좋겠네요.

닥스훈트 / 2012/06/05 09:50:13 / 추천 0
근데 function view_site($id='') 나 function view_site($id)나  사실상 매개변수 초기값 설정(혹은 디폴트 설정)하는 것 이외엔 차이가 없는데 왜 후자의 경우는 에러가 날까요?



에러 내용은

Severity: Warning

Message: Missing argument 1 for Sites::view_site()


이라고 뜨네요.
pithecus / 2012/06/05 10:10:05 / 추천 0
 CI 에서는 컨트롤러를 호출할 때 URL 규칙에 따라 자동으로 매개변수를 입력해주거든요
즉 
http://domain/view_site -> view_site() 호출
http://domain/view_site/111 -> view_site(111) 호출
( http://codeigniter-kr.org/user_guide_2.1.0/general/controllers.html )

그러므로 function view_site($id) 로 정의를 하면
http://domain/view_site -> view_site() 호출 -> argument 에러 발생

function view_site($id='') 로 정의를 하면
http://domain/view_site -> view_site() 호출 -> 매개변수가 없으니 $id ='' -> 에러 없음
이렇게 동작을 하게 됩니다. 
변종원(웅파) / 2012/06/05 10:40:39 / 추천 0
닥스훈트/ 어렵게 생각하면 한 없이 어려워집니다.

$id='' 이 부분은 값이 안 넘어올 경우 말씀하신대로 에러가 나기 때문에 미리 정의를 해주는 겁니다.
php는 변수 선언 없이 바로 사용해도 문제가 안되지만 c 언어 같은 것은 미리 선언하지 않고 쓰면 에러가 납니다.
php에서도 귀찮지만 변수는 미리 선언해 놓는 습관이 좋습니다.
닥스훈트 / 2012/06/05 13:33:59 / 추천 0
 음.. 감사합니다.

CI를 해보니 의외로 메뉴얼로는 좀 더 직관적으로 알 수 없는 자잘한 문법이 많던데..

하나하나 정리를 해봐야겠습니다.