1

我正在为我的项目使用 codeigniter。要获取我知道可以使用的 uri 段

$this->uri->segment();

但我的情况有点不同

我的网址看起来像

localhost/mediabox/home/box/21

但是一旦我转到这个 url,就会出现一个弹出表单,其中用户提供了一个访问这个页面的密钥,我使用我的家庭控制器 validate_key 函数中的 ajax 方法验证密钥

当我回显 url 它给了我 localhost/home/validate_key

在调用家庭控制器的 valiate_key 时,如何从 url 栏中的 url 获取 21?

有任何想法吗?

谢谢

4

3 回答 3

3

问题:

这不是错误,这是一种自然行为。

考虑以下:

  1. 您可以通过在地址栏中输入 URL 来向服务器请求该validate_key功能。current_url() 返回localhost/blabla/validate_key不涉及 AJAX。

  2. validate_key使用 AJAX请求。将执行相同的 PHP 代码。即使您的浏览器的地址栏显示
    current_url()也会更改为localhost/blabla/validate_key
    localhost/blabla/box/21

那么,这意味着什么?这意味着 Codeigniterbase_url()不关心您的地址栏,它关心它所在的功能,无论是通过ajax还是正常请求调用。
所以只要这个函数正在执行,URL 就指向它

解决方案:

对于这种情况,我最喜欢的解决方案是简单地创建一个隐藏输入。

简单地说,当用户请求该box功能时。你正在向他展示一个弹出式表单。所以添加一个hidden_input字段,给它一个名称和一个值 21(取决于)。

例如(您应该根据您的特定需求进行定制):

在函数显示的视图中将此添加到表单中box

form_hidden("number", $this->uri->segment(3));;

现在这些数据将被发送到您的validate_key函数。我们如何访问它?这很简单!

function validate_key(){

$this->input->post("number");//returns 21 or whatever in the URL.
//OR if the form sends GET request
$this->input->get("number");//return 21 or whatever in the URL.
/*
 *Or , you can do the following it's considered much safer when you're ONLY
 *expecting numbers, since this function(intval) will get the integer value of
 *the uri segment which might be a destructive string, so if it's a string
 *this function will simply return 0.
 */
$number = intval($this->input->post("number"));//returns 21 or whatever in the URL.
//Or if it it GET request:
$number = intval($this->input->get("number"));//returns 21 or whatever in the URL.
}
于 2012-08-06T15:35:13.470 回答
0

看起来您已经使用 .htaccess 删除index.php了 url 的一部分。因此,当您导航到时,localhost/mediabox/home/box/21您将值 21 传递给名为box的控制器中命名的函数home

如果您想将该值保留在validate_key函数中,只需在调用它时将其传递:

function box($param)
{
    //$param = 21
    $this->validate_key($param);
}    
于 2012-08-06T15:17:08.953 回答
0

最好使用隐藏字段并在需要时发布值。

于 2012-08-21T10:39:50.240 回答