gpt4 book ai didi

php - Laravel 全局设置模型

转载 作者:可可西里 更新时间:2023-11-01 06:39:44 24 4
gpt4 key购买 nike

我正致力于在 Laravel 5 中构建一个小型 CRUD 应用程序。我有一些应用程序范围的设置,例如“SiteTitle”和“BaseURL”,我想让我的管理员能够从 UI 进行更改。我的整个应用程序使用一个扩展到不同 View + Controller 的 base.blade.php 模板,这是最有可能使用这些设置的地方。

类似于:

<h1><a href="#">{{ $setting->SiteName }}</a></h1>

我将设置存储在绑定(bind)到 Setting.php 模型的数据库表中。

我不希望我的 Controller 方法中的每个人都查询数据库以获取这些设置,只是将它们传递给模板 base.blade.php。

创建我可以在整个应用程序中重复使用的某种类型的全局设置变量的最佳方法是什么?

提前致谢!

最佳答案

您可以创建一个服务提供者,比如 SettingsServiceProvider,它从数据库加载所有设置,然后缓存它们。然后在随后的页面加载中,它可能会返回缓存的设置值而不是查询数据库,这是您理应关心的问题。

简单如:

class SettingsServiceProvider extends ServiceProvider
{
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->singleton('settings', function ($app) {
return $app['cache']->remember('site.settings', 60, function () {
return Setting::pluck('value', 'key')->toArray();
});
});
}
}

假设您的设置模型根据 Laravel 的命名约定称为 Setting。然后您可以像这样访问设置:

<h1>{{ array_get(app('settings'), 'site.name') }}</h1>

如果你想要一种更漂亮的访问设置的方式,你可以创建一个辅助函数:

function setting($key)
{
return array_get(app('settings'), $key);
}

这会像这样使用:

<h1>{{ setting('site.name') }}</h1>

几乎模拟了 config() 辅助函数的用法。

关于php - Laravel 全局设置模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32745104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com