2016-07-22 4 views
1

В cakephp 2.x Я мог бы определить переменную в модели приложения public $someVar = false;, и она будет доступна во всех моделях. Я мог бы даже получить/установить его из контроллера для любой модели: например.Cakephp 3 - переменная для всех моделей

$this->User->someVar = true; 

Поскольку нет модели приложения, есть ли способ, чтобы достичь того же в торте 3. У меня есть глобальные обработчики событий настроенные как в этом ответе

Cakephp 3 callbacks, behaviors for all models

Таким образом, Цель состоит в том, чтобы иметь переменную, которая будет доступна в этих глобальных прослушивателях, обратные вызовы всех моделей, а также от контроллера через объект модели - подобно торцу 2: для обратных вызовов модели приложения, всех обратных вызовов моделей и от контроллера соответственно.

редактирования: не предпочел бы использовать Configure

Благодарность

ответ

2

Похоже, я понял это

Создать поведение и загрузить его в инициализации глобального события. например, здесь Cakephp 3 callbacks, behaviors for all models

Таким образом, он будет доступен во всех моделях и обратных вызовах. Создайте переменную в этом поведении public $someVar = null. Однако доступ непосредственно переменной на поведение не является возможным (как это трактуется как объединение) https://github.com/cakephp/cakephp/issues/9153

Таким образом, вы можете определить метод, чтобы установить/получить значение

// inside Behavior 
public function setSomeVar($val = null) { 
    if ($val === null) { 
     return $val; 
    } 

    return $this->myVar = $val; 
} 

Чтобы получить доступ/изменить эту переменную

// inside callbacks/event listeners 
$event->subject()->setSomeVar();  // to get 
$event->subject()->setSomeVar('smth'); // to set 

// from controller 
$this->Users->setSomeVar();   // to get 
$this->Users->setSomeVar('smth'); // to set