我想设置一个可通过CakePHP应用程序访问的全局变量(在控制器,模型和视图中)。对于进入应用程序的每个请求,变量值可以不同。设置它的最佳方法是什么?
我想到的一些选项:
在bootstrap.php中使用Configure :: write来设置此变量,并在任何位置使用Configure :: read来读取该值。我不确定这是否是最佳选择,因为我找不到有关Configure数组范围的任何明确文档。似乎Configure通常用于站点范围/应用程序范围的变量,因此不确定每个HTTP请求是否都有自己的Configure数组。
将此值写入bootstrap.php中的$ GLOBALS数组中。这是一个好主意吗?不能想到任何缺点,但似乎不鼓励使用$ GLOBALS。
以某种方式从bootstrap.php导出或设置一个全局变量,该变量的作用域是一个请求和线程安全的,并且可以在整个应用程序中为该请求提供。不知道如何做到这一点。
请帮忙!
答案 0 :(得分:3)
配置是你的朋友:
AppController中的:
public function beforeFilter() {
parent::beforeFilter();
Configure::write('you_variable', 'your_value');
}
您可以使用
在应用中的任意位置读取值(控制器,模型,视图)Configure::read('your_variable);
答案 1 :(得分:0)
您可以在AppController中使用公共变量,并在beforeFilter()函数中为其赋值。 像这样的东西
class AppController extends Controller {
/**
* The dependency components needed
* @var array An array of component names
*/
public $components = array(
'Cookie',
'Session',
'Auth',
);
/**
* The dependency Models needed
* @var array An array of model names
*/
public $uses = array(
'User'
);
/**
* Your variable
*/
public $yourVariable = null;
public function beforeFilter() {
parent::beforeFilter();
$this->yourVariable = 'Your request specific data';
}