使用用户定义的对顺序传递多个可选参数/值对

时间:2012-01-15 15:39:04

标签: codeigniter url url-routing codeigniter-url remap

假设用户要搜索4或5个字段,好吗?例如。他可能想用名字,电子邮件,手机甚至页码

进行搜索

我希望codeigniter的网址是这样的:

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

在一句话中:我不想强迫用户在为参数设置值时使用特定的顺序。

2 个答案:

答案 0 :(得分:4)

您可以在控制器上使用_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 :(得分:0)

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