2016-08-23 54 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,所以我不知道我是否犯這樣的錯誤。如果所有設置都集中在一個地方,則更容易檢查所有設置。但是,單個表格不是一個選項,所以這就是爲什麼我卡在這裏並尋求幫助。順便謝謝你的時間,這個解決方案看起來不錯。 –

相關問題