Codeigniter缓存控制器问题

3

我有2个控制器:

cart/
cart/buy

在两个展示中都显示图书馆购物车的内容。
    <tbody>
        <?php foreach($this->cart->contents() as $items): ?>
        <tr>
            <td><?php echo $items['name'] ?></td>
            <td>$ <?php echo $this->cart->format_number($items['price']); ?></td>
            <td><?php echo $items['qty'] ?></td>
            <td>$ <?php echo $this->cart->format_number($items['subtotal']); ?></td>
        </tr>
            <?php endforeach; ?>
    </tbody>

我的问题是当我添加第一个商品到购物车时,控制器 buy 仍然在缓存中。也就是说,控制器 cart/ 有5个商品,而控制器 cart/buy 只有1个商品。我必须按下 Ctrl + F5 才能看到所有商品。
我已经解决了这一部分:
function buy()
    {

        $this->output->set_header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
        $this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
        $this->output->set_header('Pragma: no-cache');
        $this->output->set_header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');  

        if($this->cart->contents())
        {

            $this->load->view('web/products/buy_view');
        }
        else
        {
            redirect('cart');   
        }       

    }

但是,我想知道购物车中是否有数据,如果购物车为空,则重定向到另一个页面。

显然,如果($ this->cart->contents()),"在缓存中保留",例如购物车可以在cart/中填充,但在cart/buy时为空,直到我按下Ctrl F5,条件仍然失败。

是否有任何方法可以修复此问题,或者我可能做错了什么?


p.d.我的购物车控制器中添加的方法:

function add_item()
    {
        if($this->cart_model->validate_add_item() == TRUE)
        {  
            redirect('cart');
        }
    }

我的购物车模型中的添加方法:

function validate_add_item()
    {
        $id = $this->input->post('producto_id'); 
        $cantidad = $this->input->post('cantidad');

        $this->db->select('vNombre, dPrecio');
        $this->db->where('iIdProducto', $id);
        $query = $this->db->get('product', 1);

        if($query->num_rows > 0)
        { 

            foreach ($query->result() as $row)  
            {  

                $data = array(  
                        'id'      => $id,  
                        'qty'=> $cantidad,  
                        'price'  => $row->dPrecio,  
                        'name'  => $row->vNombre  
                );  


                $this->cart->insert($data);   

                return TRUE;    
            }
        }
        else
        {  
            return FALSE;  
        }   
    }

我使用另一种方法:add_item()。 - csotelo
这很有帮助,不幸的是我看不到问题,但它会帮助其他人。我只能给你点赞并祝你好运。 - Wesley Murch
1个回答

1

我在你的代码中没有发现任何问题。我认为这可能是缓存问题,正如你所提到的那样,你可以尝试清除缓存。这将清除CodeIgniter创建的所有先前缓存,并防止未来创建缓存:

    $this->load->driver('cache');
    $this->cache->clean();

    $this->output->cache(0);

嗨,这些命令应该在哪里输入?在哪个方法内?因为我尝试了一下,不起作用。我找到了另一个“不太干净”的解决方案,在方法内添加一个带有随机值的参数/这样你就可以始终看到这些值。 - csotelo
在加载视图之前,您可以添加这些行。 - Code Prank
是的,我知道,但是没有结果 :( - csotelo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接