在Clean Codeigniter 2.1.1上防止页面/控制器/方法缓存

时间:2012-06-14 10:23:28

标签: php codeigniter codeigniter-2

我的CMS中有一个激活按钮,允许用户快速切换新闻文章的活动/非活动标记。单击切换时,切换对URL /news/toggle_active/$id发出POST请求,之后news_model更新数据库中的特定文章ID的布尔变量,并且控制器重定向回索引。

控制器

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);
}

第一次单击激活按钮时,它可以正常工作,但后续点击不执行任何操作。如果我关闭浏览器窗口并重新打开页面,该按钮将再次起作用,但只能单击一次。

我没有特别启用任何缓存,因此我不确定最新情况。

如果我从toggle_active()方法的末尾删除重定向,并输出display_flg变量的当前值,并将POST发送到/news/toggle_active/$id,则它似乎对第一个没有任何作用请求。但是,在每次后续刷新时,变量都会更改值。为什么第一次链接被击中时它没有做任何事情?

虽然没有可靠的解决方案,但我在codeigniter论坛上找到了一些似乎是类似问题的人。

1 个答案:

答案 0 :(得分:0)

我认为这最终不是一个缓存问题。我做了两个主要的修改来解决这个问题。

首先,在重定向之前,我没有检查数据库请求是否成功。

我还重写了我的模型set_active()方法。将SET子句作为数组传递给更新函数第二个参数不起作用。我需要使用set functions第三个参数来阻止查询转义查询的NOT部分。

我调整了我的功能如下:

控制器

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;
}