我一直在寻找一种在codeigniter中传递“GET”变量的方法,最后遇到了这样的结果: link text
我想知道如何实现它。
例如:
www.website.com/query会给我数据库中的每个条目。
通常我会
www.website.com/query/?id=5获得同等条目。
当我尝试CI方式时:
www.website.com/query/id/5
我收到404错误,因为它正在寻找一个名为id的类,但找不到它。
有没有办法一步一步地做到这一点?
谢谢。答案 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'
它不是很好,但它确实有效。