【问题标题】:Make a variable static after multiple submissions of requests in CakePHP?在 CakePHP 中多次提交请求后将变量设为静态?
【发布时间】:2016-08-30 07:15:48
【问题描述】:

我尝试在 AppController 中声明一个静态和公共变量,如下所示

class AppController extends Controller {


public static $var = 0;

}

然后访问其子类的控制器中的静态变量。

我的 CTP 文件有多个提交按钮,它们可以更改静态变量的值。

例如。

button A -> $var ++  
button B -> $var --

我也尝试过会话并在应用控制器的 beforefilter 功能中启动它。 仍然在多次提交时,再次重置会话变量。

class AppController extends Controller {


public function beforeFilter() {
parent::beforeFilter();
$this->Session->write('var', 0);

}
}

在这两种情况下(静态变量或会话),静态变量只能是 +1、0 或 -1。似乎 AppController 是在页面刷新时加载的。 我真正想要的是在多次按下按钮后静态变量可以是 + 或 - 超过 1,并且静态变量仅在关闭浏览器后才会重置。

【问题讨论】:

  • 听起来你需要将它存储在会话中,而不是作为类变量
  • 如果您想使用该静态变量,请在它的特定控制器(基于 ctp)中使用,而不是在 AppController 中使用。 2.最好创建一个Session变量并相应地更新它。
  • 我尝试了会话并在应用控制器中启动它。仍在刷新时,会话变量再次重置。
  • 在我看来,您每次都在重置会话变量。如果您需要它存在,但又不想在每次执行 if(!$this->Session->get('var')) { $this->Session->write('var ', 0);这样它只会在第一次创建它,但之后它就不管它了。会话应该可以正常工作。
  • 是 cake2 还是 cake3?

标签: php cakephp model static controller


【解决方案1】:

在需要时通过按钮设置值,您应该在某些controller action 中使用post 方法,而不是在beforeFilter() 中。

示例:

public function foo() {
    if ($this->request->is('post')) {
        // get posted value from $this->request
        $this->Session->write('var', 'value');
    }
}

然后你可以像这样读取任何控制器中的值:

$value = $this->Session->read('var');

【讨论】:

  • 虽然我的问题解决了,但我想知道在哪里创建一个静态变量,这样我就可以在 cakePHP 中添加或减去超过 1,而不是使用 if(static var or session var not exist) { 设置值或创建会话);还是谢谢你
  • 静态变量不保留上次请求时的值。如您所知,在下一次请求时,它将再次设置。
  • 那么会话是唯一的方法吗?谢谢!
  • 可能有更多方法,但我会为此使用会话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多