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

问题描述 投票:11回答:8

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

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

php codeigniter url get uri
8个回答
21
投票

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

这是一个例子

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

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


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


9
投票

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

看起来像:

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

然后我希望它会奏效。


3
投票

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

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

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

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

0
投票

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

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

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

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.


0
投票

解决这个问题的方法是使用_remap()函数。您只需要在index()函数之前添加此函数

function _remap($method, $args)
{

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

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


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

}

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

© www.soinside.com 2019 - 2024. All rights reserved.