创建“设置”的最佳实践是什么?模型在Laravel 5


What are the best practices for creating a "settings" model in Laravel 5?

这是我使用Laravel的第一个项目(我从5.2开始)。我正在建立一个自我管理的网站。有一个管理员应该保存网站设置,以便以后在网站中使用。例如:背景颜色、社交网络、带图片的旋转木马、产品等

我的第一次尝试是创建一个模型"设置":id | key (unique) | value。当我试图保存社交网络(在网站标题中显示)时,我意识到我必须在"value"中保存一个带有URL,标题等的json…关系模型的丑陋实现,所以我得出的结论是它很糟糕。我创建了一个单独的模型SocialNetwork: id | URL | image | name

现在我想在加载所有这些模型一次在我的BaseController,所以我可以有它通过所有的控制器,但我不确定它是正确的。我的意思是,一个数组$settings与所有模型作为它的一部分:

abstract class BaseController extends Controller
{
    protected $settings;
    ...
    public function __construct(...)
    {
        $this->settings = [
            'backgroundColor' => 'red',
            'socialNetworks' => SocialNetwork::all(),
            'other' => Other::all(),
            ...
        ]
    }
}

对我来说这看起来很可怕,但我对这个框架感到困惑,我不知道我能做些什么来处理这个问题。有人跟我说过服务提供商,但我试图找出它的优点,以及能够利用这些模型(保存数据)的最佳方法,但我不明白。

我不是要求明确的代码(这将是很好的),我将在理解方法后调查它,但一些提示或概念帮助将是非常感激的。

谢谢!

这是个好问题。最近我为我的一个Code Canyon产品(Krisma CMS Script)做了这样的设计,我的方法如下:

1)创建一个服务提供者

public function boot()
    {
        $this->header();
        $this->intro();
        $this->about();
        $this->resume();
        $this->portfolio();
        $this->services();
        $this->stats();
        $this->contact();
        $this->footer();
        $this->section();
        $this->codesetting();
        $this->customizer();
    }

在boot中调用的每个函数都在boot函数下面的Provider类中声明。例如,对于Header Section,我通过Header Model从DB获取数据并全局共享,可以在应用程序的任何地方访问。

$section = Section ::find(1);
view()->share('section ', $section);

2)为每个部分创建一个表,即about, intro等,并插入我想要修改的值。

3)现在在管理面板中创建一个用于更改/修改的表单,并更新所需的部分属性。

4)获取视图中的数据。假设用户将背景色从管理面板更改为红色,那么在视图中打印出该变量style : {{ $sectionname->color }}

5)就是这样,我希望它能给你一个更好的想法如何设置可以实现,我为我的产品这样做,可能有一个更好的方法,但到目前为止,这是我在我的研究中发现的,对我来说是完美的。