[Laravel4] 从数据库读取配置

再次验证时发现下面的代码有问题,有待修复

场景

很多时候我们的网站的配置都是存在数据库里面的,这样后台也方便配置修改。而Laravel4默认的是将数组直接写在配置文件里面的。

解决

Get Config from database 这个还不错,但是有个问题,就是不支持这样的$register = Config::get('site.register'); var_dump($register['invite']);类似于多级数组的意思

数据库里面直接这样写:

|       key       | value |
|-----------------|-------|
| register.invite |   1   |

我们改造一下

<?php
// app/config/site.php
class DBconfiguratorObject implements ArrayAccess, Serializable {
    protected $config = array();
    protected $table = null;

    private static $_instance = null;

    public static function instance($tableName = 'site'){
        if(self::$_instance === null){
            self::$_instance = new self($tableName);
        }
        return self::$_instance;
    }

    private function __construct($tableName = 'site'){
        $this->table = DB::table($tableName);
        $config = $this->table->lists('value', 'key');
        $this->config = array();
        foreach ($config as $key => $value) {
            array_set($this->config, $key, $value);
        }
    }

    public function offsetGet($key){
        // return $this->config[$key];
        return array_get($this->config, $key);
    }

    public function offsetSet($key, $value){
        if($this->offsetExists($key)){
            $this->table->where('key', $key)->update(array(
                'value' => $value
            ));
        } else {
            $this->table->insert(array(
                'key' => $key,
                'value' => $value
            ));
        }
        $this->config[$key] = $value;
    }

    public function offsetExists($key){
        return isset($this->config[$key]);
    }

    public function offsetUnset($key){
        unset($this->config[$key]);
        $this->table->where('key', $key)->delete();
    }

    public function serialize(){
        return serialize($this->config);
    }

    public function unserialize($serialized){
        $config = unserialize($serialized);
        foreach($config as $key => $value){
            $this[$key] = $value;
        }
    }

    public function toJson(){
        return json_encode($this->config);
    }
}

return DBconfiguratorObject::instance();

标签: none

添加新评论