将多个可选参数/值对与用户定义的对顺序进行传递

问题描述:

说用户要在4或5个字段上搜索,好吗?例如。他可能想通过姓名,邮箱,手机或偶数页号将多个可选参数/值对与用户定义的对顺序进行传递

搜索我想要那个笨的网址是这样的:

site.com/Controller/Method/variable1/value1/variable2/value2/variable3/value3 

site.com/Controller/Method/variable2/value2/variable3/value3/variable1/value1 

(他们应该有相同的结果)

或以这种格式

site.com/Controller/Method/variable2/value2/variable4/value4 

一些例子来阐明我的问题:

site.com/user/search/firstname/John/mobile/123/page/2 

或:

site.com/user/search/lastname/Smith/email/gmail.com 

在一个句子:我不想强制用户设置的值的参数时,使用一个特定的顺序。

您可以在控制器上使用_remap功能。

function _remap($method, $params) 
{ 
    $map = array(); 
    for($i = 1; $i < count($params); $i = $i + 2) 
    { 
     $map[$params[$i-1]] = $params[$i]; 
    } 

    if($method[0] != '_' && method_exists($this, $method)) 
     return $this->$method($map); 
} 

如果你想在您所有的控制器使用它,你会更好编写自定义控制器是CI_Controller具有这种功能扩展,并拥有所有你的控制器扩展这一点。

+0

完美答案amccausl,非常感谢! :) – 2012-01-15 15:53:53

+0

但仍然有一个问题:为什么你编码的最后一个?它应该没有这个工作。我们将其他参数/​​值对作为数组赋给$方法,但为什么我们需要最终的if? – 2012-01-15 15:58:16

+1

在代码点火器中,前缀为下划线的方法在控制器中是私有的。你不应该能够从URL中运行它们。像_remap函数一样。没有它,你可以调用URL(http://yoursite.com/controller/_remap/)中的_remap和其他链接,这会导致无限循环。 – amccausl 2012-01-15 16:00:13

我将所有参数作为1字符串与分隔符例如。 /username|alunr#category|99等,并使用php's explode() function从那里找到值。

+0

我相信在使用另一个分隔符时会失去标准格式,/ – 2012-01-15 16:29:05

+0

斜杠将根据.htaccess文件进行分析。其他角色不应该损坏它。 – AlunR 2012-01-22 20:24:51