【发布时间】:2017-05-03 20:19:41
【问题描述】:
我有一张桌子:型号为Setting的设置
class Setting extends Model
{
protected $fillable = [
'name', 'value',
];
}
我创建了一个服务提供SettingsServiceProvider并在app.php注册
class SettingsServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot(Factory $cache, Setting $settings)
{
if (\Schema::hasTable('settings')) {
config()->set('settings', Setting::pluck('value', 'name')->all());
}
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
}
}
将name 和value 添加到表settings 后,我在视图中这样调用它:
{{ config('settings.sitename') }}
其中sitename 是完美返回值的name 字段。
问题: 这种方法的问题在于,每个页面请求都会进行一次数据库调用。而且由于这些设置并不意味着经常更改,所以我一直在寻找一种将其缓存在 laravel 缓存中的方法。
我尝试了以下方法:
class SettingsServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot(Factory $cache, Setting $settings)
{
$settings = $cache->remember('settings', 60, function() use ($settings)
{
return $settings->pluck('name', 'value')->all();
});
config()->set('settings', $settings);
/* if (\Schema::hasTable('settings')) {
config()->set('settings', Setting::pluck('value', 'name')->all());
} */
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
但是当我尝试将它返回到这样的视图时:
{{ config('settings.sitename') }}
没有任何回报。
【问题讨论】:
-
由于
remember是一种获取值的方式 - 如果不存在默认值,则可能是早期测试中已经存在的值(例如)。可能值得重新启动服务器(如果可能),看看它是否仍然发生。 -
我尝试了一切,它没有在视图中返回任何值。
-
你试过清除配置缓存
php artisan config:clear -
感谢您的建议。之前没试过,刚才试过了,还是没有返回值给视图。
-
当你做
{{ dd(config('settings')) }}时你会得到什么?
标签: php laravel caching laravel-5.4