제목 | index 메쏘드에 변수 전달하기.. | ||
---|---|---|---|
글쓴이 | Die.t | 작성시각 | 2009/05/04 16:50:00 |
|
|||
class Test extends Controller { function Test() { parent::Controller(); } function index($var) { echo $var } } 와 같이 컨트롤러의 기본 메쏘드인 index()에 get 방식으로 변수를 전달하려면.. system/codeigniter/CodeIgniter.php에서 // is_callable() returns TRUE on some versions of PHP 5 for private and protected // methods, so we'll use this workaround for consistent behavior if ( ! in_array(strtolower($method), array_map('strtolower', get_class_methods($CI)))) { //show_404("{$class}/{$method}"); show_404를 주석 처리한 후 $method = 'index'; array_splice($URI->rsegments, 0, 1, array($class, $method)); $RTR->set_method($method); 를 삽입하면 됩니다.. 더 좋은 방법이 없을까 고민했는데 딱히 떠오르질 않네요.. 아시는 분 있으시면 코멘트 부탁드립니다. |
|||
다음글 | codeigniter 요청 처리절차 (1) | ||
이전글 | 개발 참고용 CodeIgniter 라이브러리 모음(계속... (2) | ||
kirrie
/
2009/05/04 17:39:57 /
추천
0
|
Die.t
/
2009/05/04 19:05:35 /
추천
0
답글 감사드립니다.
말씀하신대로 사실 올바른 사용법은 당연히 - 레퍼런스에 있는 사용법이 아니니까 - 아닙니다만..몇 차례 컨트롤러 기본 메쏘드에 변수 전달이 안되는 점 때문에 불편했던 적이 있었습니다. 물론 url 계획이나 구조화 관련 잘 설계된 계획서가 있다면 필요없는 꼼수겠지만요..^^ 위에 CodeIgniter.php에서 수정한 부분은 특별히 uri routing 관련 config 설정 때 조금 주의하신다면 특별히 문제는 없을 것 같습니다. 컨트롤러 내의 다른 메쏘드 실행도 문제되지 않는 부분에서 수정했구요. board 컨트롤러의 list 메쏘드가 vars라는 하나의 변수만 필요해도 http://www.foo.com/board/list/vars/vars/vars/vars라고 입력해도 실행이 되길래 비슷한 방식으로 수정해 본 겁니다. http://www.foo.com/board/vars 와 같은 uri_string이 입력될 경우 수정을 안한 상태에서는 404 에러 페이지가 표시되구 $RTR->fetch_method() 하면 vars 가 출력됩니다.. 위의 소스는 그냥 이 부분에 에러 표시대신 index 메쏘드를 할당한 거 밖에 없거든요.. |
http://www.foo.com/board
와 같은 url을 입력했다고 했을때 라우팅을 커스터마이징 하지 않았다면 내부적으로는
board 클래스의 index 메소드를 실행합니다. 즉, 위의 url은
http://www.foo.com/board/index
와 같은 효과를 가집니다.
제가 이해한 바로는 http://www.foo.com/board/vars 와 같이 파라미터를 주시겠다는 말씀 같은데,
사실 이건 올바른 사용 같지가 않네요. 왜냐하면 board/vars라고 하면 이건 board 클래스의 vars라는 메소드를
실행하겠다는 의미하고 같으니까 말이죠. 라우팅 설정을 수정해서 사용한다고 하면 board 클래스의 다른 메소드는 또 사용할 수가 없게 됩니다.
$route['board/(:any)'] = 'board/index/$1';
와 같이 한다면 겉으로는
http://www.foo.com/board/vars
와 같이 입력한다고 해도 내부적으로는
http://www.foo.com/board/index/vars
라고 처리되므로 파라미터를 전달 할 수 있게 되지만, 이렇게 하면 board 클래스의 index 메소드 밖에는 사용할 수 없게 됩니다.
그러므로 굳이 그렇게 사용하셔야 한다면 index 메소드는 그대로 놔두시고, index 메소드에 해당하는 다른 메소드 (예를 들어 list 메소드)
와 같은 것을 만들어서 그쪽으로 리디렉션 하도록 하시는게 좋을 것 같습니다.
혹은, 제가 Iruka님의 글을 잘못 이해했다면 지적해주세요. ^^