codeigniter替代Get变量

时间:2010-11-26 00:52:26

标签: codeigniter

我一直在寻找一种在codeigniter中传递“GET”变量的方法,最后遇到了这样的结果: link text

我想知道如何实现它。

例如:

www.website.com/query会给我数据库中的每个条目。

通常我会

www.website.com/query/?id=5获得同等条目。

当我尝试CI方式时:

www.website.com/query/id/5

我收到404错误,因为它正在寻找一个名为id的类,但找不到它。

有没有办法一步一步地做到这一点?

谢谢。

3 个答案:

答案 0 :(得分:6)

使用Codeigniter开发人员预期的方法实现此目的的两种好方法。

选项一:

如果你总是期待一个" id"要出现的参数,您可以利用在要调用的方法(函数)之后立即传递URI中的值的功能。

传递/[controller]/[method]/[value]的示例:

http://www.website.com/query/index/5

然后您将访问" id"的值。作为函数的预期参数。

Class Query extends Controller {
...

    // From your URL I assume you have an index method in the Query controller.
    function index($id = NULL)
    {
        // Show current ID value.
        echo "ID is $id";
        ...
    }
    ...
}

选项二:

如果您希望除了ID之外还允许传递许多参数,您可以按任意顺序将所有参数作为key =>值对添加到URI段。

传递/[controller]/[method]/[key1]/[val1]/[key2]/[val2]/[key3]/[val3]的示例:

http://www.website.com/query/index/id/5/sort/date/highlight/term

然后,您将使用URI类中的uri_to_assoc($segment)函数将第3段(" id")中的所有URI段向前解析为key =>值对的数组。 / p>

Class Query extends Controller {
...

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

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

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

Array
(
    [id] => 5
    [sort] => date
    [highlight] => term
)

一个和两个混合:

您还可以混合使用这些ID,其中ID作为预期参数传递,其他选项作为key =>值对传递。当需要ID并且其他参数都是可选的时,这是一个很好的选择。

传递/[controller]/[method]/[id]/[key1]/[val1]/[key2]/[val2]的示例:

http://www.website.com/query/index/5/sort/date/highlight/term

然后,您将使用URI类中的uri_to_assoc($segment)函数将第4段(" sort")中的所有URI段向前解析为key =>值对的数组。 / p>

Class Query extends Controller {
...

    // From your code I assume you are calling an index method in the Query controller.
    function index($id = NULL)
    {
        // Show current ID value.
        echo "ID is $id";

        // Get parameters from URI.
        // URI Class is initialized by the system automatically.
        $data->params = $this->uri->uri_to_assoc(4);
        ...
    }
    ...
}

$id将包含您的ID值,$data->params将包含您的URI细分数组:

答案 1 :(得分:1)

您仍然可以使用GET参数,它们只是映射到控制器成员函数参数:

test.com/query/id/4

将映射到控制器:

$query->id($id);

这假设您已在CI应用程序的controllers文件夹中正确添加了查询控制器和成员函数。

您还可以使用表单和CI输入类将参数值作为POST参数传递。

答案 2 :(得分:0)

使用$ this-> uri-> uri_to_assoc(2)2是偏移量,因为您在第2段中启动了关联的段数组。您还需要一个路径来制作/查询映射到控制器和方法(除非您在index()方法中执行此操作)。

所以,这个网址:

  

/查询/ ID /富/键/酒吧

可以使用以下方式阅读:

$get = $this->uri->uri_to_assoc(2);

echo $get['id']; // 'foo'
echo $get['key']; // 'bar'

它不是很好,但它确实有效。