如何在CakePHP中存储特定于请求的“全局”变量

时间:2013-03-22 08:34:19

标签: php cakephp global-variables

我想设置一个可通过CakePHP应用程序访问的全局变量(在控制器,模型和视图中)。对于进入应用程序的每个请求,变量值可以不同。设置它的最佳方法是什么?

我想到的一些选项:

  1. 在bootstrap.php中使用Configure :: write来设置此变量,并在任何位置使用Configure :: read来读取该值。我不确定这是否是最佳选择,因为我找不到有关Configure数组范围的任何明确文档。似乎Configure通常用于站点范围/应用程序范围的变量,因此不确定每个HTTP请求是否都有自己的Configure数组。

  2. 将此值写入bootstrap.php中的$ GLOBALS数组中。这是一个好主意吗?不能想到任何缺点,但似乎不鼓励使用$ GLOBALS。

  3. 以某种方式从bootstrap.php导出或设置一个全局变量,该变量的作用域是一个请求和线程安全的,并且可以在整个应用程序中为该请求提供。不知道如何做到这一点。

  4. 请帮忙!

2 个答案:

答案 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';            
    }