2009-11-17 4 views
0

CodeIgniter 작업시 $ _GET이 기본적으로 비활성화되어 있습니다. 왜 이런지 궁금하네요.

많은 경우, 매우 긴 검색어를 작성하고 싶습니다. 예를 들어, N 개의 다른 필드로 데이터베이스를 검색 할 수있는 양식이 있습니다. 코드 이그나이터에서 내 검색 결과를 표시 할 수있는 URL은 다음과 같습니다

http://mysite.com/field1/field2/field3/.../fieldN-1/fieldN

그래서 예를 들어 URL이

http://mysite.com/shopping/toys/educational/age6-8/page1/sortbypriceinascendingorder/

내가하지 특히 ​​좋아해요 것이 때문에 :

1) 나중에 검색 매개 변수를 추가하여 다음과 같이 입력 할 수 있습니다.

http://mysite.com/shopping/toys/education/age6-8/page1/sortbypriceinascendingorder/boys-only/in-stock

URL의 페이지/sortby 세그먼트 끝에 "소년 전용"및 "재고 있음"을 추가하는 방법이 마음에 들지 않습니다. 그것은 기분이 좋지 않습니다.

2) "장난감"세그먼트와 "교육"세그먼트를 사용하지 않으면 어떻게됩니까? 그런 다음 URL이 그 다음 당신은 쿼리 문자열 매개 변수를 주문하는 때문에 더 의미가 검색에 $ _GET 매개 변수를 사용하지 않습니다

http://mysite.com/shopping/all_products/all_categories/age6-8/page1/sortbypriceinascendingorder/

을 가지 서투른 모습 (& 필드 = 값)하지 않습니다 문제? 쿼리 문자열 매개 변수를 생략하면 자동으로 "선택되지 않음"을 의미합니다.

+0

다음과 매우 유사합니다 : http://stackoverflow.com/questions/334708/codeigniter-get-parameters-allowable –

답변

2

+ (많은 시스템 에서처럼)과 같은 검색 매개 변수에 다른 구분 기호를 사용할 수도 있습니다. 이 포트는 단일 컨트롤러 경로로 전달되며 필요에 따라 explode() 수 있습니다. 예 : http://http://mysite.com/shopping/toys+education+age8+etc

2

먼저 원하는 경우 $ _GET 변수를 항상 활성화 할 수 있습니다.

function shopping() { 
    $args = func_get_args(); 
    foreach ($args AS $arg) { 
    list($filter_name, $filter_value) = explode(':', $arg, 2); 
    if ($filter_name == 'cat') { 
     // set category filter to $filter_value (education) 
    } elseif ($filter_name == 'type') { 
     // set type filter to toys 
    } 
    // etc etc 
    } 
} 
1

이유를 그들이이 그것을 컨트롤러, 기능 및 매개 변수의 호출을 방해한다는 것입니다 왜 :

또한, 컨트롤러 코드에서 구문 분석 후 ../shopping/type:toys/cat:education/age:6-8/sort:price_asc 같은 PARAMS을 사용하고 있었다.

CI는 URI 문자열을 사용하여 "프로그램"에게 수행 할 작업을 지시합니다. 이에

www.example.com/controller/method/parameter 

:이 당신이이 만드는 가능하게 할 수있는 모드입니다하지만

www.example.com/?c=controller&m=methods&p=parameter1&yourgetitem=yourgetvalue 

로 꽤되지 않음,하지만 당신은 당신이 CI와 함께 원하는대로 할 수있다; 그것은 단지 약간의 조정이 필요합니다.

1

여기, CodeIgniter를 모두 쿼리 문자열 및 세그먼트를 사용할 수는 방법은 다음과 같습니다 설정에서

.PHP 설정 :

  • $ config [ 'uri_protocol'] = "PATH_INFO";
  • $ config [ 'enable_query_strings'] = TRUE;

.htaccess에는? 대신?/index.php를 사용하십시오. 당신의 CI 규칙에서 : RewriteRule^(. *) $ index.php/$ 1 [L]

관련 문제