Cakephp 3 - 所有模型的变量

Cakephp 3 - variable for all models

在 cakephp 2.x 中,我可以在应用程序模型 public $someVar = false; 中定义一个变量,它可以在所有模型中访问。我什至可以从任何型号的控制器中 access/set 它:例如

$this->User->someVar = true;

由于没有应用程序模型,有没有办法在蛋糕 3 中实现同样的事情。我按照这个答案设置了全局事件侦听器

所以,目的是要有一个变量,可以在那些全局侦听器、所有模型的回调中以及从控制器通过模型的对象访问 - 类似于蛋糕 2:对于应用程序模型的回调,所有模型的回调回调和分别来自控制器。

编辑: 不喜欢使用 Configure

谢谢

看来我想通了

创建一个行为并将其加载到初始化全局事件中。类似于这里的例子

这样它将在所有模型和回调中可用。在该行为中创建一个变量 public $someVar = null。然而,直接访问行为的变量是不可能的(因为它被视为关联) https://github.com/cakephp/cakephp/issues/9153

因此,您可以定义方法 set/get 值

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

    return $this->myVar = $val;
}

到access/modify那个变量

// 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