[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();