大多数时候我都总是希望将配置存入数据库里,虽然laravel可以很方便的通过config()函数读到自定义的配置,但通常情况下,这些配置都是通过修改/config目录下的相关文件实现的,不方便灵活管理。
所以我们对于从数据库读取配置信息有刚性需要,下面我就分享个人的解决方案。
首先,我们需要根据自己的情况建存放配置信息的表,下面是我的数据表参考:
CREATE TABLE `kwok_settings` (
`key` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '变量名',
`value` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '变量值',
`note` varchar(64) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '参数说明',
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统设置';
上图是我需要灵活管理的相关信息。
快捷操作,请使用下面的命令:
php artisan make:model Setting
也可以手工新建文件/app/Models/Setting.php,内容如下:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Setting extends Model
{
public $timestamps = false; //不维护时间
//protected $primaryKey = 'key'; //设置主键后,会被自动编号
protected $fillable = ['key', 'value', 'note']; //可批量填充的字段
}
开始我想使用 app/Providers/AppServiceProvider.php 里的boot()实现程序运行就读取所需要的缓存,代码也比较繁琐,通常会借用的自己定义的辅助函数库。
绕了一圈,发现都用到了辅助函数了,为何不绕过app/Providers/AppServiceProvider.php文件,并按需要读取呢。所以我们需要直接在辅助函数库:app/helpers.php 里写入下面的代码即可:
if (!function_exists('settings')) {
/**
* 说明: 通过$key 从缓存/数据表settings返回配置值
* @param mixed: $key 配置项键(可传多个键)
* @return mixed: 自定的设置(数组)项
*/
function settings($key)
{
static $settings; //静态变量 将$settings常驻内存
if (is_null($settings)) {
$settings = Cache()->rememberForever('settings', function () {
return Arr::pluck(Setting::all('key', 'value')->toArray(), 'value', 'key');
});
}
//$key 传数组则返回多个 key->value
return (is_array($key)) ? Arr::only($settings, $key) : $settings[$key];
}
}
//注:Arr::* 为Laravel提供的辅助函数,功能及使用请自行查看官方文档
例如:我们需要读取文章缓存时间:
$duration = settings('cache_time_article'); //文章缓存时间
同时可读取多个缓存项:
$configs = settings(['cache_time_article','cache_time_default','cache_time_category']); //多个缓存时间
在模板里读取配置:
@section('title', settings('seo_title'))
@section('keywords', settings('seo_keywords'))
@section('description',settings('seo_description'))
除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:https://www.55mx.com/post/220
《【Laravel实战】从数据库里读取配置的完美解决方案》的网友评论(0)