CodeIgniter:URI和表单

时间:2009-04-03 02:25:23

标签: forms codeigniter uri

我正在使用CodeIgniter实现一个搜索框,但我不确定如何通过搜索参数。我有三个参数:搜索字符串;产品分类;和排序顺序。他们都是可选的。目前,我通过$_POST将参数发送到临时方法,该方法将参数转发到常规URI表单。这很好用。我使用了一种奇怪的URI格式:

http://site.com/products/search=computer,sort=price,cat=laptop

有没有人有更好/更清晰的传递内容? 我正在考虑将它作为参数传递给products方法,但由于参数是可选的,所以事情会变得混乱。我应该吮吸它,只需打开$_GET方法吗?提前谢谢!

3 个答案:

答案 0 :(得分:3)

查询字符串

您可以enable query strings in CodeIgniter允许更标准的搜索功能。

<强> CONFIG.PHP

$config['enable_query_strings'] = FALSE;

启用后,您可以在应用中接受以下内容:

http://site.com/products/search?term=computer&sort=price&cat=laptop

此处的好处是,用户可以轻松编辑URL以快速更改其搜索,并且您的搜索使用常用搜索功能。

这种方法的缺点是你违反了CodeIgniter开发团队的一个设计决策。但是,我的个人意见是,只要查询字符串不用于大部分内容,仅适用于搜索查询等特殊情况,这是可以的。

答案 1 :(得分:1)

更好的方法和CI开发人员想要的方法是将所有搜索参数添加到URI而不是像这样的查询字符串:

http://site.com/products/search/term/computer/sort/price/cat/laptop

然后,您将从第3段(“term”)向前解析所有URI段到key =&gt;数组中。 URI类中带有uri_to_assoc($segment)函数的值对。

Class Products extends Controller {
...

    // From your code I assume you are calling a search method.
    function search()
    {
        // Get search parameters from URI.
        // URI Class is initialized by the system automatically.
        $data->search_params = $this->uri->uri_to_assoc(3);
        ...
    }
    ...
}

这将使您可以轻松访问所有搜索参数,它们可以在URI中以任何顺序排列,就像传统的查询字符串一样。

$data->search_params现在将包含您的URI细分数组:

Array
(
    [term] => computer
    [sort] => price
    [cat] => laptop
)

在此处详细了解URI类:http://codeigniter.com/user_guide/libraries/uri.html

答案 2 :(得分:0)

如果您使用固定数量的参数,您可以为它们分配默认值并发送它,而不是完全不发送参数。例如

 http://site.com/products/search/all/somevalue/all

接下来,在控制器中,您可以忽略参数if(parameter =='all'。)

 Class Products extends Controller {
 ...

     // From your code I assume that this your structure.
     function index ($search = 'all', $sort = 'price', $cat = 'all')
     {
         if ('all' == $search)
         {
            // don't use this parameter
         }
         // or
         if ('all' != $cat)
         {
            // use this parameter
         }
         ...
     }
     ...
 }