很抱歉打扰但是我希望有人可以帮我解决我在CI中遇到的一个非常平凡的问题。我可以使用CI的示例通过URL发送变量,例如:
http://localhost/project/main/getproduct/24
在我的主控制器的getproduct()方法中,我可以将变量发送24,没有问题。
但是我现在想通过URL传递两个变量,但我不知道如何做到这一点或者CodeIgniter是否允许我这样做。有人可以告诉我如何在CI中传递2个变量和一个可以检索它们的方法我尝试过:
http://localhost/project/main/getproduct/24/45
然后在我的getproduct方法中:
public function getproduct($productID, $factoryID){
.....
}
但我发现我的方法可以得到第一个变量没有问题,但不是第二个变量。任何人都可以指出我正确的方向。提前谢谢了。
您可以使用uri
检索网址中的值
这是一个例子
public function getproduct()
{
$productID = $this->uri->segment(3);
$factoryID = $this->uri->segment(4);
// ProductID will be 25
// Factory ID will be 45
}
然后您可以随意使用这些值
接受的答案适用于此特定问题,但如果网址发生变化则无效。要访问控制器中的多个变量,只需添加到函数定义中。
http://localhost/project/main/getproduct/24/45
class Main extends CI_Controller {
public function getproduct($productID = 0, $factoryID = 0)
{
// ProductID will be 25
// Factory ID will be 45
}
}
您必须在config / routes.php中设置路由以解析项目。
看起来像:
$route["getproduct/(:any)/(:num)"]="main/changequestion/$1/$2"
然后我希望它会奏效。
如果其他人使用CI3遇到此问题。在CodeIgniter 3中,不需要特殊的路由。现在不确定它是否也适用于CI2。
您可以使用以下参数访问这些URI段:
public function getproduct($productID, $factoryID){
.....
}
http://example.com/project/main/getproduct/24/45
要获得'45',你可以这样做:
$id1 = $this->uri->segment(3);
echo $id1; //output is 45
将URI段传递给您的方法
如果您的URI包含两个以上的段,它们将作为参数传递给您的方法。
例如,假设你有一个像这样的URI:
example.com/index.php/products/shoes/sandals/123
您的方法将传递URI段3和4(“凉鞋”和“123”):
<?php
class Products extends CI_Controller {
public function shoes($sandals, $id)
{
echo $sandals;
echo $id;
}
}
重要!!!如果您使用URI路由功能,则传递给您的方法的段将是重新路由的段。
请参阅此链接作为Codeigniter官方指南。 Codeigniter Official Guide.
解决这个问题的方法是使用_remap()函数。您只需要在index()函数之前添加此函数
function _remap($method, $args)
{
if (method_exists($this, $method))
{
$this->$method($args);
}
else
{
$this->Index($method, $args);
}
}
我希望这能解决你的问题。
您可以使用uri
来检索网址http://localhost/project/main/get_product/12/23中的值
这是一个例子
public function get_product(){
$product_id = $this->uri->segment(3); // Product id will be 12
$factory_id = $this->uri->segment(4); // Factory id will be 23
}
然后您可以随意使用这些值