Php 防止干净的Codeigniter 2.1.1上的页面/控制器/方法缓存
我的CMS中有一个激活按钮,允许用户快速切换新闻文章的活动/非活动标志。单击切换按钮后,会向urlPhp 防止干净的Codeigniter 2.1.1上的页面/控制器/方法缓存,php,codeigniter,codeigniter-2,Php,Codeigniter,Codeigniter 2,我的CMS中有一个激活按钮,允许用户快速切换新闻文章的活动/非活动标志。单击切换按钮后,会向url/news/toggle_active/$id发出POST请求,之后news_model会更新数据库中特定文章id的布尔变量,控制器会重定向回索引 控制器 模型 第一次单击激活按钮时,它会工作,但随后的单击不会起任何作用。如果关闭浏览器窗口并重新打开页面,按钮将再次工作,但只需单击一次 我还没有专门启用任何缓存,所以我不确定发生了什么 如果我从toggle\u active()方法的末尾删除重定向,
/news/toggle_active/$id
发出POST请求,之后news_model
会更新数据库中特定文章id的布尔变量,控制器会重定向回索引
控制器
模型
第一次单击激活按钮时,它会工作,但随后的单击不会起任何作用。如果关闭浏览器窗口并重新打开页面,按钮将再次工作,但只需单击一次
我还没有专门启用任何缓存,所以我不确定发生了什么
如果我从toggle\u active()
方法的末尾删除重定向,并输出display\u flg
变量的当前值,然后发送到/news/toggle\u active/$id
,则在第一次请求时它似乎什么也不做。但是,在每次后续刷新时,变量都会更改值。为什么第一次点击链接时它什么都不做
我在论坛上发现一些人似乎也有类似的问题,尽管没有解决方案。我认为这最终不是缓存问题。为了解决这个问题,我做了两个主要的修改 首先,在重定向之前,我不会检查数据库请求是否成功 我还重新编写了models
set\u active()
方法。将SET子句作为数组传递给update函数的第二个参数无效。我需要使用set functions第三个参数来阻止查询转义查询的NOT
部分
我调整了我的功能如下:
控制器
模型
您是否在其他浏览器中尝试过此功能?这不是我在CI中遇到过的问题,即使启用了缓存。在Chrome和Firefox中也存在同样的问题,不知道问题是什么。如果在
redirect('news')
之前从index()方法(构建新闻文章列表的代码)粘贴代码,效果会很好。但是我不应该在toggle\u active()
方法中重建索引,我应该这样做吗?当我重定向到它时,它应该会这样做……如果可以,请注释掉toggle\u active
方法上的任何安全性,并将包含任何段的url粘贴到其中,然后单击提交。然后,它会告诉您/我们正在发生什么类型的重定向,以及“在”重定向之前的响应。希望这会有帮助?还有。。。仅供参考,toggle\u active
可以重写为-我不确定您是否出于任何特殊原因使用这些片段,但假设您的url是http://www.domain.com/controller/toggle_active/1
然后您可以使用函数参数。谢谢您对函数参数的建议,我不知道!我在标题中找不到任何奇怪的地方,今天早上我找到了解决这个问题的方法。我将很快提交答复。
function toggle_active()
{
$url = $this->uri->uri_string();
$last_segment = count($this->uri->segment_array());
$id = $this->uri->segment($last_segment);
$row = $this->news_model->set_active($id);
redirect('news/index', 'refresh');
}
function set_active($id)
{
$data = array(
'display_flg' => 'NOT display_flg'
);
$this->db->where('id', $id);
$this->db->update($this->tbl_news, $data);
}
function show_toggle($id)
{
if($this->news_model->set_active($id))
{
redirect('news/index', 'refresh');
}
}
function set_active($id)
{
$this->db->where('id', $id);
$this->db->set('display_flg', 'NOT display_flg', FALSE);
$query = $this->db->update($this->tbl_news);
return $query;
}