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

时间:2014-11-04 10:59:06

标签: php symfony doctrine-orm

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

所有后端都在 Sonata 中完成。

设置类:

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

问题是我有不同的值类型要存储。我有一些布尔,列表,整数等。例如,我想以列表的形式显示语言数组,但是当涉及到"页面上的帖子"设置,用户应该能够记下他想要的任何整数。有没有正确的方法来存储和显示?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

在所有情况下,配置应该是不可摧毁的,只要出现问题,应该有静态默认值,以便它可以依赖。我正在考虑调整Symfony \ Component \ Config组件来实现这一目标。