2016-08-23 21 views
3

这是我第一个使用Laravel的项目(我以5.2开头)。我正在建立一个自我管理的网站。有一个管理员应该保存网站设置以便稍后在网站中使用。例如:背景颜色,社交网络,带图片的旋转木马,产品等。创新Laravel 5中的“设置”模型的最佳实践是什么?

我的第一次尝试是创建一个模型“设置”:id |键(唯一)|值。当我试图保存社交网络(显示在网站标题中)时,我意识到我必须通过URL,标题等来保存json的“价值”......针对关系模型的丑陋实现,所以我来了结论是不好的。我用:id |创建了一个sepparated模型SocialNetwork URL |图像|名称。

现在我想在我的BaseController中一次加载所有这些模型,所以我可以通过所有控制器,但我不知道它是正确的。我的意思是,所有型号的数组$设置,它的一部分:

abstract class BaseController extends Controller 
{ 
    protected $settings; 
    ... 

    public function __construct(...) 
    { 
     $this->settings = [ 
      'backgroundColor' => 'red', 
      'socialNetworks' => SocialNetwork::all(), 
      'other' => Other::all(), 
      ... 
     ] 
    } 
} 

它看起来horripilant给我,但我用这个框架失去了,我不知道什么是我可以做些什么来对付最好有了这个。 有人告诉我有关服务提供者,但我想弄清楚它的优点以及能够使用这些模型(保存数据)的最佳方法,但我不明白。我不是要求明确的代码(但它会很好),我会在了解该方法后对其进行调查,但是一些提示或概念上的帮助将会非常感谢。

谢谢!

回答

1

这是一个很好的问题。最近我为我的一个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(); 
    } 

每个该功能被称为在引导在下面的引导功能的提供者类声明。 例如用于标题部分i通过标题模型从数据库中提取数据并全局共享,可以在应用程序中的任何位置进行访问。

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

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

3)现在在管理面板中创建一个更改/修改窗体并更新所需的部分属性。

4)在您的视图中获取数据。假设用户已将管理面板的背景颜色更改为RED,请在您的视图中将该变量正确地打印出来style : {{ $sectionname->color }}

5)就是这样,我希望它能让您更好地了解设置如何实现,这对于我的产品来说可能有更好的方法,但到目前为止,这是我在我的研究中发现的,并且适用于我。

+1

谢谢,这是有道理的。如你所说,我看到你直接将数据分享到boot下的每个声明函数的视图中。我的问题是:你如何访问每个实例在控制器内部工作?有没有一种“干净”的方式,让他们在一个单一的对象,如“设置”?更重要的是,它会好吗?我的意思是,我喜欢按照有序的方式工作,每个事物属于一个组(如果需要的话),我认为它应该是一个组的一部分。你怎么看? –

+0

首先,当您像上述方法共享对象时,您可以在任何地方访问它,例如在Controller中或在视图中的天气。第二你说如果你想访问它只是从设置(一个对象),可以完成,如果你想保存所有的字段在一个表中,然后分享它,但如果你有很多部分,在我的情况下,我会建议不同的桌子。而且你说过它会好吗?我会说我用在我的产品中,该产品经过codecanyon和codecanyon的批准,具有很高的标准和良好的代码标准。 +可能有比这更好的方法。 –

+0

我的意思是,它看起来更好(只是对我来说,因为我认为它是一个保存在数据库中的大配置),如果它是具有属性和嵌套对象的单个对象......但我不知道Laravel,所以我不知道我是否犯这样的错误。如果所有设置都集中在一个地方,则更容易检查所有设置。但是,单个表格不是一个选项,所以这就是为什么我卡在这里并寻求帮助。顺便谢谢你的时间,这个解决方案看起来不错。 –

相关问题