将多个可选参数/值对与用户定义的对顺序进行传递
说用户要在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具有这种功能扩展,并拥有所有你的控制器扩展这一点。
我将所有参数作为1字符串与分隔符例如。 /username|alunr#category|99
等,并使用php's explode()
function从那里找到值。
我相信在使用另一个分隔符时会失去标准格式,/ – 2012-01-15 16:29:05
斜杠将根据.htaccess文件进行分析。其他角色不应该损坏它。 – AlunR 2012-01-22 20:24:51
完美答案amccausl,非常感谢! :) – 2012-01-15 15:53:53
但仍然有一个问题:为什么你编码的最后一个?它应该没有这个工作。我们将其他参数/值对作为数组赋给$方法,但为什么我们需要最终的if? – 2012-01-15 15:58:16
在代码点火器中,前缀为下划线的方法在控制器中是私有的。你不应该能够从URL中运行它们。像_remap函数一样。没有它,你可以调用URL(http://yoursite.com/controller/_remap/)中的_remap和其他链接,这会导致无限循环。 – amccausl 2012-01-15 16:00:13