【问题标题】:Passing multiple variables in URL using codeigniter使用 codeigniter 在 URL 中传递多个变量
【发布时间】:2014-05-11 01:17:39
【问题描述】:

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

但我发现我的方法可以毫无问题地获得第一个变量,但不能获得第二个变量。谁能指出我正确的方向。非常感谢。

【问题讨论】:

  • 你的getproduct 方法是什么样的?

标签: php codeigniter url get uri


【解决方案1】:

接受的答案将适用于这个特定的问题,但如果 url 发生变化,它将不起作用。要访问控制器中的多个变量,只需添加到函数定义中即可。

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

【讨论】:

  • 这行得通,但没有路线。尝试添加路线时它不起作用
【解决方案2】:

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

}

那么你可以随意使用这些值

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

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

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

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

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

          【讨论】:

            【解决方案7】:

            你必须在 config/routes.php 中设置一个路由来解析项目。

            看起来像:

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

            那我希望它会起作用。

            【讨论】:

            • 我将如何检索方法中的变量?
            • 我从来没有这样做过——它总是对我有用。
            • 试试这个:ellislab.com/codeigniter/user-guide/general/controllers.html。在将 URI 段传递给您的函数。希望能帮助到你 。我认为如果在 uri 路由处于活动状态时使用超过 1 个参数,则只能使用 uri->segment 获取它们。用uri段获取它们基本上是一样的。
            • 我明白了...我从未使用过 URI 路由功能。谢谢!
            • 您不必设置路由来获取这些变量。它已经内置在控制器中以接受函数中的变量。
            【解决方案8】:

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

            这是一个例子

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

            那么你可以随意使用这些值

            【讨论】:

            • 我不同意这是这样做的方式。您不应该像那样阅读变量。 CodeIgniter 有一种特定的方式来获取该数据,而无需额外的两行代码。请参阅下面的答案stackoverflow.com/a/22774721/1084306
            • 嘿,照多诺万说的做。
            猜你喜欢
            • 2016-11-15
            • 1970-01-01
            • 2016-04-14
            • 2018-06-09
            • 2016-12-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多