Moo*_*ose 6 php mysql model laravel
我正在Laravel 5中构建一个小型CRUD应用程序.我有一些应用程序范围的设置,如"SiteTitle"和"BaseURL"我想让我的管理员能够从UI进行更改.我的整个应用程序使用base.blade.php模板,该模板扩展到不同的视图+控制器,这是最有可能使用这些设置的地方.
就像是:
<h1><a href="#">{{ $setting->SiteName }}</a></h1>
Run Code Online (Sandbox Code Playgroud)
我将设置存储在数据库表中,并与Setting.php模型绑定.
我宁愿不是我的控制器方法的每个人都在查询数据库中的这些设置,只是将它们传递给模板base.blade.php.
创建某种类型的全局设置变量的最佳方法是什么?我可以在整个应用程序中重用它?
提前致谢!
Mar*_*ean 14
例如,您可以创建一个服务提供程序,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();
});
});
}
}
Run Code Online (Sandbox Code Playgroud)
假设您的设置模型是Setting根据Laravel的命名约定调用的.然后,您可以访问以下设置:
<h1>{{ array_get(app('settings'), 'site.name') }}</h1>
Run Code Online (Sandbox Code Playgroud)
如果您想要更漂亮的方式来访问设置,您可以创建一个辅助函数:
function setting($key)
{
return array_get(app('settings'), $key);
}
Run Code Online (Sandbox Code Playgroud)
哪个会像这样使用:
<h1>{{ setting('site.name') }}</h1>
Run Code Online (Sandbox Code Playgroud)
几乎模仿config()辅助函数的用法.
小智 1
如果您的应用程序使用多个控制器,那么您可以定义一个由所有其他控制器扩展的父控制器。在父控制器的构造函数中,您可以检索设置数据并将其存储在类属性中,该属性可供所有子控制器类使用。您的子控制器可以简单地将这些数据传递给视图。