0

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

我想到的一些选择:

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

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

  3. 以某种方式从 bootstrap.php 导出或设置一个全局变量,该变量的范围是请求和线程安全的,并且在该请求的应用程序中可用。不知道如何/如果这是可能的。

请帮忙!

4

2 回答 2

3

在这里配置是你的朋友:

在 AppController 中:

public function beforeFilter() {

    parent::beforeFilter();
    Configure::write('you_variable', 'your_value');

}

您可以在应用程序(控制器、模型、视图)中的任何位置读取值

Configure::read('your_variable);
于 2013-03-22T10:56:33.790 回答
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';            
    }
于 2013-03-22T08:49:54.417 回答