TIP게시판
| KangMin | |
|---|---|
|
안녕들하세요... 많은 분들이 느끼시는 부분이실 $this->uri->segment(순서); 로 GET 대신 사용하는... 순서가 너무도 중요하므로 다소 곤란하거나 수정할 부분이 많이 생길 수 있죠... 그래서 얼마전 mycastor도 올리고, 이런저런 라이브러리 확장 방식등이 보이는 것 같습니다. CI자체에 일반 쿼리스트링을 쓰는 방법도 있긴하지만... 고건 좀 싫어서.... 전 get이긴한데... ?a=1&b=2 방식의 일반적인 방식은 아니고 abc.com/controller/method/파라메터명_값/파라메터명_값 이런 방식으로 만들어봤습니다. 이렇게 한 이유는 아래 소스에도 써있지만, $config['permitted_uri_chars'] 을 손대지 않고, CI 기본 segment를 우선 거친 후 믿을 수 있는 놈을 이용하기 위함입니다. 또, 기존 segment와 병행도 가능하기 위함입니다.. 파라메터 추가할 일이 생겼는데 너무 손댈데가 많아서, 제 입맛에 맞게 만들어봤습니다. 다소 오타쿠스러울지 모르겄지만..ㅋ 사용하실 분들은 마음껏~ 사용해주시면 제가 오히려 감사~~~
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* @author BaeKangMin.com
* @param (파라메터명 또는 seg, $no_result) -> 파라메터명이 숫자면 $this->uri->segment(숫자) 와 동일
* @url 타입 : abc.com/controller/method/파라메터명_값/파라메터명_값
* 즉, abc.com/controller/method/a_100/b_200 일때
* $this->uri->get('a') 하면 100이 리턴됩니다.
* $this->uri->get(3) 하면 a_100이 리턴됩니다.
* @목적1 : $config['permitted_uri_chars'] 손대지말기
* @목적2 : CI 기본 segment를 우선 거친 후 믿을 수 있는 놈을 이용
* @목적3 : 파라메터 순서 상관없이 일반(?) get방식과 비스무레하게 사용
* @단점 : 단순히 URL을 파싱하므로, 컨트롤/함수명등과 중복되지 않게 주의해야함...
*/
class MY_URI extends CI_URI
{
public function __construct()
{
parent::CI_URI();
/*
// fail...
foreach($this->segments as $key=>$val)
{
$temp = $this->segment($key);
if($temp != '_' && strpos($temp, '_') !== FALSE)
{
$temp = explode('_', $temp);
// a_ba_bb 의 경우 a를 호출하면 ba_bb가 나와야 하므로 '_' 으로 다시 조합
$this->param[$temp[0]] = join('_', array_slice($temp, 1));
}
}
*/
}
public function get($param, $no_result=FALSE)
{
//파라메터가 숫자면 CI 기본 segment 함수 호출
if(is_numeric($param) === TRUE)
{
return $this->segment($param, $no_result);
//파라메터가 문자면 쿼리스트링을 파싱해서
} else
{
foreach($this->segments as $key=>$val)
{
$temp = $this->segment($key, $no_result);
//ver 2
//정규표현식으로 파라메터명으로 시작하는 것만 잡음
//substr로 파라메터명에 '_' 붙이면 안되는 것 해결
//explode 안함으로인해 시간/메모리 이득
if($temp != $param.'_' && preg_match('/^'.$param.'_/', $temp))
{
return substr($temp, strlen($param.'_'));
}
/*
//ver 1
//파라메터명에 '_' 붙이면 안됨
if($temp != $param.'_' && strpos($temp, $param.'_') !== FALSE)
{
$temp = explode('_', $temp);
// a_ba_bb 의 경우 a를 호출하면 ba_bb가 나와야 하므로 '_' 으로 다시 조합
if($temp[0] == $param) return join('_', array_slice($temp, 1));
}
*/
}
return FALSE;
/*
// fail...
if(array_key_exists($param, $this->param))
{
return $this->param[$param];
} else {
return FALSE;
}
*/
}
}
}
/* End of File */
급히 만들고 잠깐만 테스트해본지라 문제가 될 부분 있으면 말씀해주시기 바랍니다... 꾸지람 및 버그 리포팅 환영합니당~ 휴일 마무리 잘 하세용~ 오늘 제가 뽑은 사람들 반띵만 되면 좋겠네용..ㅋ |
|
|
||||||||
|
||||||||
|
||||||||
|
||||||||
|
||||||||
|
||||||||
|
||||||||
|
||||||||
|
||||||||
|
||||||||
| 번호 | 제 목 | 글쓴이 | 날짜 | 조회 | 추천수 |
|---|---|---|---|---|---|
| 829 | HMVC 5.4 & Template_ 타로구조 만들기 [1] | 타로 | 2012-02-02 | 100 | 0 |
| 824 | CI lang팩 -> Javascript lang팩 [4] | KangMin | 2012-01-25 | 184 | 0 |
| 823 | anchor_popup 헬퍼 화면 정 가운데 띄우기.. [0] | DJ구스 | 2012-01-17 | 149 | 0 |
| 822 | [자바스크립트] 창을 화면 정중앙에 위치하게 계산하기 [0] | 웅파 | 2012-01-11 | 182 | 0 |
| 815 | hook에서 선언한 변수를 컨트롤러에서 사용하기 [2] | 웅파 | 2011-12-27 | 368 | 0 |
| 812 | mysql 부분적인 에러 핸들링 처리 [2] | EziX | 2011-12-20 | 390 | 0 |
| 811 | 컨트롤러 외부에서의 종료방법 [1] | EziX | 2011-12-20 | 302 | 0 |
| 809 | icodekore sms 모듈 쓰는 분들 참고하세요.. [0] | namGoos | 2011-12-09 | 514 | 0 |
| 803 | Upgrading from 2.0.3 to 2.1.0 [5] | namGoos | 2011-12-06 | 493 | 0 |
| 794 | .svn 폴더 삭제 하기 [7] | 불의회상 | 2011-11-30 | 452 | 1 |
| 792 | [1원] 윈도우서버+mssql 에서 CLI(Comm.. [2] | 터프키드 | 2011-11-29 | 458 | 0 |
| 786 | Form_validation 라이브러리 less_t.. [2] | EziX | 2011-11-17 | 460 | 0 |
| 780 | 1원팁. 저의 Template_ 이용방법입니다. [2] | namGoos | 2011-10-31 | 995 | 0 |
| 773 | MYSQL 자동으로 시간 설정 [5] | 불의회상 | 2011-10-26 | 659 | 0 |
| 767 | 모바일 웹사이트 개발시 참조하시면 좋을 것 같네요~ [7] | 탱크 | 2011-10-20 | 781 | 1 |
| 764 | EUC-KR 판정 방법 [3] | 불의회상 | 2011-10-18 | 727 | 0 |
| 758 | eclipse Autocomplete 업데이트 버전. [4] | EziX | 2011-10-14 | 937 | 0 |
| 751 | 글로벌 사이트를 위한 시간(GMT) 적용 [8] | 웅파 | 2011-10-12 | 518 | 0 |
| 744 | 포토바다 개발 내규 문서 공개합니다. [7] | namGoos | 2011-10-10 | 846 | 1 |
| 735 | jquery cheat 1.0 ~ 1.6 [6] | 웅파 | 2011-10-06 | 759 | 0 |

