使用codeigniter在URL中传递多个变量

时间:2014-03-31 15:41:23

标签: php codeigniter url get uri

很抱歉打扰但是我希望有人可以帮我解决我在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){
  .....
}

但是我发现我的方法可以获得第一个变量而没有问题,但不是第二个变量。任何人都可以指出我正确的方向。非常感谢提前。

8 个答案:

答案 0 :(得分:24)

接受的答案适用于此特定问题,但如果网址发生变化则无效。要访问控制器中的多个变量,只需添加到函数定义中。

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
    }
}

参考:CodeIgniter User Guide

答案 1 :(得分:21)

您可以使用uri检索网址中的值

这是一个例子

public function getproduct()
{
  $productID =  $this->uri->segment(3);
  $factoryID =  $this->uri->segment(4);
  // ProductID will be 25
  // Factory ID will be 45
}

然后您可以随意使用这些值

答案 2 :(得分:9)

您必须在config / routes.php中设置路由以解析项目。

看起来像:

   $route["getproduct/(:any)/(:num)"]="main/changequestion/$1/$2"

然后我希望它会奏效。

答案 3 :(得分:3)

如果其他人使用CI3遇到此问题。在CodeIgniter 3中,不需要特殊的路由。现在不确定它是否也适用于CI2。

您可以使用以下参数访问这些URI段:

  

http://localhost/project/main/getproduct/24/45

public function getproduct($productID, $factoryID){
  .....
}

答案 4 :(得分:0)

http://example.com/project/main/getproduct/24/45

要获得'45',您可以这样做:

 $id1 =  $this->uri->segment(3);
 echo $id1; //output is 45

答案 5 :(得分:0)

将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.

答案 6 :(得分:0)

此问题的解决方法是使用 _remap()函数。您只需要在index()函数

之前添加此函数
function _remap($method, $args)
{

       if (method_exists($this, $method))
       {
           $this->$method($args);
       }
       else
       {
            $this->Index($method, $args);
       }
}

我希望这能解决你的问题。

答案 7 :(得分:0)

您可以使用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

}

然后,您可以随意使用这些值