php从数据库获取配置,[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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值