【问题标题】:How to define an array with global scope in SilverStripe?如何在 SilverStripe 中定义具有全局范围的数组?
【发布时间】:2014-11-05 22:04:30
【问题描述】:

目前我在 _config.php 中有以下内容

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

但是,我的一个控制器中的一个函数无法看到该数组。除非我声明“global $myConfigArray”,否则它是未定义的,在这种情况下它是空的。

我在这里做错了什么?

【问题讨论】:

    标签: php arrays global-variables global silverstripe


    【解决方案1】:

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

    你可以把它放在你的 _config/config.yml 中,它也会被缓存:

    MyConfig:
      Foo:
        key1: value1
        key2: value2
    

    (注意 yml 的正确意图!)

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

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

    【讨论】:

    • 这是一个非常好的方法。
    【解决方案2】:

    _config.php 中,在设置变量之前将其定义为global

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

    然后在你的函数中声明全局变量,然后再使用它:

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

    【讨论】:

    • 谢谢!只是标准的PHP方式......当你的答案出现时,我刚刚自己解决了这个问题:-)
    猜你喜欢
    • 2013-05-31
    • 1970-01-01
    • 2015-07-06
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多