Сделать переменную статической после нескольких отправок запросов в CakePHP?

Я попытался объявить статическую и общедоступную переменную в AppController следующим образом.

class AppController extends Controller {


public static $var = 0;

}

А затем получить доступ к статической переменной в контроллере ее подкласса.

В моем файле CTP есть несколько кнопок отправки, которые изменяют значение статической переменной.

eg.

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

Я также попробовал сеанс и запустил его в функции перед фильтром контроллера приложения. По-прежнему при многократной отправке переменная сеанса снова сбрасывается.

class AppController extends Controller {


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

}
}

В обоих случаях (статическая переменная или сеанс) статическая переменная может быть только +1, 0 или -1. Кажется, AppController загружается при обновлении страницы. Что мне действительно нужно, так это то, что статическая переменная может быть + или - более 1 после многократного нажатия кнопок, а статическая переменная сбрасывается только после закрытия браузера.


person Anndexi9    schedule 30.08.2016    source источник
comment
Похоже, вам нужно сохранить его в сеансе, а не как переменную класса   -  person Farkie    schedule 30.08.2016
comment
Если вы хотите использовать эту статическую переменную, используйте ее в конкретном контроллере (на основе ctp), а не в AppController. 2. лучше всего создать переменную сеанса и соответствующим образом обновить ее.   -  person Anant Kumar Singh    schedule 30.08.2016
comment
Я попробовал сеанс и запустил его в контроллере приложения. Все еще при обновлении переменная сеанса снова сбрасывается.   -  person Anndexi9    schedule 30.08.2016
comment
Мне кажется, что вы каждый раз сбрасываете свою переменную сеанса. если вам нужно, чтобы он существовал, но не хотите перезаписывать его каждый раз, когда вы можете сделать if(!$this-›Session-›get('var')) { $this-›Session-›write('var ', 0); } Таким образом, он создает его только в первый раз, но после этого оставляет его в покое. Сессии должны отлично работать для этого.   -  person Architect Nate    schedule 30.08.2016
comment
Ага! Наконец-то понял. Спасибо, Асперон! но $this->Session->get('var') вызывает фатальную ошибку в CakePHP. Незнайка ю. Ошибка: Uncaught TypeError: аргумент 1, переданный в ErrorHandler::handleException(), должен быть экземпляром Exception   -  person Anndexi9    schedule 30.08.2016
comment
это торт 2 или торт 3?   -  person arilia    schedule 30.08.2016
comment
Это Торт2. Это проблема?   -  person Anndexi9    schedule 31.08.2016


Ответы (1)


Для установки значения когда хотите, с помощью кнопок вы должны использовать метод post в каком-то controller action, а не в 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');
person user3082321    schedule 01.09.2016
comment
Хотя моя проблема решена, я хотел бы знать, где создать статическую переменную, чтобы я мог добавить или вычесть более 1 в cakePHP вместо использования if (статическая переменная или переменная сеанса не существует) { установить значение или создать сеанс); В любом случае, спасибо - person Anndexi9; 01.09.2016
comment
Статическая переменная не сохраняет значение, которое она имела при последнем запросе. При следующем запросе он будет установлен снова, как вы уже знаете. - person user3082321; 01.09.2016
comment
Значит, сессия — единственный выход? Спасибо! - person Anndexi9; 02.09.2016
comment
Там может быть больше способов, но я буду использовать сеанс для этой цели. - person user3082321; 03.09.2016