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

Posted

技术标签:

【中文标题】使用 codeigniter 在 URL 中传递多个变量【英文标题】:Passing multiple variables in URL using codeigniter 【发布时间】: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 方法是什么样的? 【参考方案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 有一种特定的方式来获取该数据,而无需额外的两行代码。请参阅下面的答案***.com/a/22774721/1084306 嘿,照多诺万说的做。

以上是关于使用 codeigniter 在 URL 中传递多个变量的主要内容,如果未能解决你的问题,请参考以下文章

长 URL 值未在 Codeigniter 中提交

显示从控制器传递的表(视图)中的数据 - Codeigniter

Codeigniter:在服务器中找不到请求的 URL

CodeIgniter - URL 解决方案

带有获取参数的codeigniter分页url

Codeigniter:将无线电值传递给数据库