在使用CodeIgniter时,默认情况下会禁用$ _GET。我想知道为什么会这样。
很多时候,我想构建很长的搜索查询。例如,我有一个表单,允许您通过N个不同的字段搜索数据库。在代码点火器中,显示我的搜索结果的网址是:
http://mysite.com/field1/field2/field3/.../fieldN-1/fieldN
所以一个示例网址是
http://mysite.com/shopping/toys/educational/age6-8/page1/sortbypriceinascendingorder/
我不是特别喜欢这个,因为:
1)如果我想在以后添加更多搜索参数,以便我们有类似的内容:
我不喜欢我在网页的末尾添加“仅限男孩”和“有库存”/网址的排序部分。感觉不对。
2)如果一个人不使用“玩具”部分和“教育”部分怎么办?然后网址看起来有点笨拙
http://mysite.com/shopping/all_products/all_categories/age6-8/page1/sortbypriceinascendingorder/
使用$ _GET参数进行搜索更有意义,因为查询字符串参数(& field = value)的顺序无关紧要?省略查询字符串参数意味着“未选择”。
答案 0 :(得分:2)
首先,如果您愿意,可以随时启用$ _GET变量。
此外,您可以使用../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 :(得分:2)
您还可以为搜索参数使用不同的分隔符,例如+
(与许多系统一样)。这些传递到单个控制器路由,您可以根据需要explode()
。示例:http://http://mysite.com/shopping/toys+education+age8+etc
答案 2 :(得分:1)
为什么他们这样做是因为它干扰了控制器,函数和参数的调用。
CI使用URI字符串告诉“程序”要做什么。您可以启用一种模式:
www.example.com/controller/method/parameter
进入这个:
www.example.com/?c=controller&m=methods&p=parameter1&yourgetitem=yourgetvalue
虽然不是很漂亮,但你确定可以用CI做任何你喜欢的事情;它只是需要一些调整。
答案 3 :(得分:1)
可以在CodeIgniter中使用查询字符串和段,具体如下:
在config.php中设置:
在.htaccess中使用a / after index.php而不是?你的CI规则:RewriteRule ^(。*)$ index.php / $ 1 [L]