2016-07-22 37 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 
相关问题