2009-11-17 31 views
0

在使用CodeIgniter时,默认情况下$ _GET被禁用。我想知道这是为什么。

很多时候,我想建立很长的搜索查询。例如,我有一个表单,允许您通过N个不同的字段搜索数据库。在代码点火器,以显示我的搜索结果中的网址是:

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

所以一个例子网址是

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看起来有点笨拙

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

不更明智使用$ _GET参数搜索,因为这样的顺序放置查询字符串参数(&字段=值)不物?并省略查询字符串参数自动意味着“未选中”。

+0

非常类似于:http://stackoverflow.com/questions/334708/codeigniter-get-parameters-allowable – 2009-11-17 19:58:20

回答

2

您也可以对搜索参数使用不同的分隔符,如+(与许多系统一样)。这些传递给单个控制器路由,您可以根据需要explode()。例如:http://http://mysite.com/shopping/toys+education+age8+etc

2

首先,你可以随时启用$ _GET变量,如果你想。

此外,您还可以使用PARAMS像../shopping/type:toys/cat:education/age:6-8/sort:price_asc,然后分析它们在控制器代码:

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

它们之所以这样做,这是它与控制器,功能和参数的通话干扰。

CI使用URI字符串告诉“程序”该做什么。有一种模式,则可以启用,使这个:

www.example.com/controller/method/parameter 

到这一点:

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

不漂亮,虽然,但你肯定可以做任何你喜欢的CI;它只需要一些调整。

1

有可能在笨同时使用查询字符串和细分,方法如下:

在配置。php设置:

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

在.htaccess中使用/后index.php而不是一个?在您的CI规则:RewriteRule ^(。*)$ index.php/$ 1 [L]