Cakephp 3 - 适用于所有型号的变量

时间:2016-07-22 15:19:39

标签: cakephp cakephp-3.x

在cakephp 2.x中,我可以在app模型public $someVar = false;中定义一个变量,并且可以在所有模型中访问它。我甚至可以从任何型号的控制器访问/设置它:例如

$this->User->someVar = true;

由于没有应用程序模型,有没有办法在蛋糕3中实现相同的功能。我在此答案中设置了全局事件监听器

Cakephp 3 callbacks, behaviors for all models

因此,目的是拥有一个变量,可以在那些全局侦听器,所有模型的回调以及从控制器到模型的对象中访问 - 类似于cake 2:对于app model的回调,所有模型的回调和来自控制器。

编辑不愿意使用Configure

由于

1 个答案:

答案 0 :(得分: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