CodeIgniter计数器使用"global"变量


CodeIgniter counter using "global" variable

我是一名CodeIgniter开发新手,当我意识到我无法制作一个非常简单的点击计数器时,我的挫败感达到了新的高度。其理念是,你点击一个按钮,然后计算点击次数。这是视图simplecounter_view:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');?>
<html>
    <body>  
     <?php
        echo '<form action="'. base_url().'index.php/simplecounter" method="POST">';        
        echo '<font color="blue">Click counter:' . $counter . '</font><br/><br/>';              
        echo '<input type="submit" name="myform" value="Count">';
        echo '</form>';
     ?>
    </div>
  </body>
</html>

如果你点击表单按钮,它会调用SimpleCounter Controller:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class SimpleCounter extends CI_Controller { 
    public function __construct() {             
        parent::__construct();
      $this->load->helper('url');
    }
    public function index() {
        $myform=$this->input->post('myform');
        if ($myform=='Count') {
            Globals::setCounter(Globals::getCounter()+1);
        }   
        $data['counter'] = Globals::getCounter();
        $this->load->view('simplecounter_view', $data);         
    }
}

最后,我使用一个Globals类与属性$counter,以保持其值"全局",并从控制器访问:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Globals {
     private static $initialized=false;
     private static $counter;   
    private function __construct() {}
    private static function initialize() {
        if (self::$initialized)
            return;
        self::$counter = 0;
        self::$initialized = true;    
     }    
    public static function setCounter($n) {
        self::initialize();
        self::$counter = $n;
    }
    public static function getCounter() {
        self::initialize();
        return self::$counter;
    }
}

上面的代码没有像我预期的那样工作。点击计数器不会在每次用户点击时更新。在我看来,Globals类每次调用它的一个方法时都会重新创建,因此$counter被重置为零,$初始化为false。

我知道可能有不同的方法(比如在config.php中定义$counter),尽管我认为使用一个单独的类来保存$counter更优雅。我遗漏了什么?我哪里搞错了?非常感谢您的帮助。

由于HTTP是无状态协议,一旦HTTP响应发送到请求浏览器,所有变量都会丢失。

在计算中,无状态协议是一种通信协议将每个请求视为与…无关的独立事务使任何先前的请求组成独立的通信请求和响应对。

需要将计数器保存在数据库中