使用 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 中传递多个变量的主要内容,如果未能解决你的问题,请参考以下文章