如何在实体中存储系统设置


How to store system settings in entity

我目前正在做系统,管理员应该可以编辑这些设置。他不能添加它们,只能从现有的中进行选择/编辑。

所有后端都在索纳塔中完成。

设置类别:

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;
}

问题是我要存储不同的值类型。我有一些布尔值、列表、整数等。例如,我想将语言数组显示为列表,但当涉及到"页面上的帖子"设置时,用户应该能够写下他想要的任何整数。有什么合适的方法来储存和展示它吗?

正如您所说,使用这种存储方法的问题是可变数据类型。很快你就会想要嵌套配置,最终你会编写复杂的查询来选择和更新嵌入的JSON字符串(相信我,我知道)。

我不能给你一个确切的解决方案,因为这是一个我仍在努力解决的问题。然而,我尚未探索的一些解决方案包括:

  • 使用MongoDB。因为它本身以JSON存储数据,所以它更适合存储任意数据类型(至少在标量和数组的范围内)。

  • 或动态文件配置。它是一个可写文件,使用XML或JSON作为存储任意数据的格式。不过,如果服务器软件在多台机器上运行,您可能会遇到一个问题。但是,如果您可以实现第一个解决方案,那么这个解决方案本质上是相同的。

在任何情况下,配置都应该是不可破坏的,因为如果出现问题,应该有静态默认值供其使用。我正在考虑调整Symfony''Component''Config组件来实现这一点。