2014-11-04 75 views
0

我目前正在做系統,哪些設置應該由管理員編輯。他不能添加它們,但只能從現有選項中進行選擇/編輯。如何在實體中存儲系統設置

所有的後端都在索納塔完成。

設置類:

class SystemSettings 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(name="key", type="string", nullable=true) 
    */ 
    private $key; 

    /** 
    * @ORM\Column(name="value", type="string", nullable=true) 
    */ 
    private $value; 
} 

問題是,我有不同的值類型來存儲。我有一些布爾值,列表,整數等等。例如,我想顯示一組語言作爲列表,但是當涉及到「在頁面上發佈」設置時,用戶應該能夠寫下他想要的任何整數。有沒有適當的方式來存儲和顯示?

回答

0

使用這種存儲方法的問題正如您所說的可變數據類型。很快你會想要嵌套的配置,並最終你會寫複雜的查詢來選擇和更新嵌入的JSON字符串(相信我,我知道)。

我不能給你一個確切的解決方案,因爲這是我仍然試圖解決的問題。然而,我尚未探索的一些解決方案包括:

  • 使用MongoDB。因爲它本機存儲JSON數據,所以它更適合存儲任意數據類型(至少在標量和數組範圍內)。

  • 或動態文件配置。這是一個使用XML或JSON作爲格式來存儲任意數據的可寫文件。但是,如果服務器軟件在多臺機器上運行,則可能會遇到問題。但是,如果您可以實施第一個解決方案,那麼這個解決方案本質上是一樣的。

在所有情況下,只要出現問題,配置應該是不可破壞的,所以應該存在靜態的默認設置以使其可以恢復。我正在考慮調整Symfony \ Component \ Config組件來實現這一點。