2014-11-04 47 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组件来实现这一点。