如何在SilverStripe中定义具有全局范围的数组?

时间:2014-11-05 22:04:30

标签: php arrays global-variables global silverstripe

目前我在_config.php

中有以下内容
$myConfigArray = array(
  'key1' => 'val1',
  'key2' => 'val2'
);

然而,我的一个控制器中的某个功能无法看到该阵列。它是未定义的,除非我声明"全球$ myConfigArray",在这种情况下它是空的。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:8)

不要使用全局变量。不要这样做!如果由于某种原因安装的另一个模块具有相同的变量并覆盖您的设置,则可能会出现问题。

您可以将它放在_config / config.yml中,它也将被缓存:

MyConfig:
  Foo:
    key1: value1
    key2: value2

(注意yml的正确意图!)

您可以使用Config API访问它,例如

$foo = Config::inst()->get('MyConfig', 'Foo');

答案 1 :(得分:2)

_config.php中将您的变量定义为global,然后再进行设置:

global $myConfigArray;
$myConfigArray = array(
    'key1' => 'val1',
    'key2' => 'val2'
);

然后在你的函数中声明全局变量:

public function myFunction() {
    global $myConfigArray;
    $myConfigArray['key1'];
}