【问题标题】:Symfony 2: How and where to store runtime settings fileSymfony 2:如何以及在何处存储运行时设置文件
【发布时间】:2016-08-20 12:24:45
【问题描述】:

我正在开发一个 Symfony 2 WebApp,它使用 PayPal Rest API 创建和接受 PayPal 付款。

为了能够将每个用户重定向到其语言的 PayPal 页面,必须为每种语言/区域创建一个 Experience Profile。

每个Experience Profile 只能创建一次。例如,一旦创建了 US 语言环境的配置文件,该配置文件就可以为使用相同语言环境的每个客户重复使用:

  1. 客户输入他的地址并在我的页面上输入 XY
  2. 我的页面会检查 XY 语言环境的配置文件是否存在
  3. 为XY 语言环境创建新配置文件并将其存储或重新使用现有配置文件

每个配置文件都有一个唯一的 ID。 因此我正在寻找一种方法来存储区域设置/ID 对。一个简单的解决方案是 JSON 文件。 但是该文件在 Symfony 结构中的存储位置是什么?

每当来自新国家/地区的用户进行付款时,都会即时创建个人资料。因此,这些数据是在运行时创建的,因此我认为它不属于 Symfony 的标准 config 目录。我什至不知道这些文件夹是否应该由我的代码访问/写入。

那么:存储此类文件的正确位置是什么。

编辑: 正如@JimL 在 cmets 中指出的那样,当然可以将数据存储在数据库中。然而,我正在处理的支付包应该在不同的项目中使用,因此应尽可能与项目的其余部分分开。

这里的目标是将数据存储在文件中,而不是数据库中。当然,数据库效率更高,但在这种特殊情况下,一个简单的文件就足够了。

问题是:在哪里存储这个文件?第一个想法是使用/MyBundle/Resources/config,因为这个目录包含所有其他配置文件。但是,对于在运行时更改的文件,这是否也是正确的地方?

【问题讨论】:

  • 听起来您可以将其添加为与用户相关的实体。然后将其存储在db中
  • 不,这不是要走的路。个人资料未链接到特定用户。所有选择“美国”作为国家/地区的用户都将使用美国配置文件。如果同一用户在下次购买时选择“加拿大”,他应该使用 CA 配置文件等。此外,支付逻辑是在单独的包中实现的,因此可以在其他项目中重复使用。我想让这些数据远离数据库。
  • Bundles 也可以添加数据库实体,我仍然认为这应该在数据库中。如果未链接到用户,则链接到付款
  • 当然 DB 是一种选择,但我不认为,在这种情况下,这将是最好的解决方案。这是在运行时创建的配置数据。没有实体等。所以问题是:在哪里存储这种配置文件。我已经更清楚地编辑了问题。

标签: php symfony


【解决方案1】:

3.x 的标准 Symfony 目录结构是:

应用程序/ 应用程序配置、模板和翻译。

bin/ 可执行文件(例如 bin/console)。

src/ 项目的 PHP 代码。

测试/ 自动测试(例如单元测试)。 标准目录结构是:

var/ 生成的文件(缓存、日志等)。

供应商/ 第三方依赖。

网络/ Web 根目录。

您可以将其放在自定义目录下的标准 var 目录中。记住权限。

关于 var 目录的更多一般信息: http://www.linfo.org/var.html

【讨论】:

  • 我使用的是 Symfony 2.8,它没有 var/ 目录。相反,缓存、日志等位于app/。我现在在我的 PaymentServices 中注入了 kernel.cache_dir 并将数据存储在那里。
  • 这是有争议的。清除缓存将清除您的数据配置文件。也许更好的选择是从用户配置中获取存储位置。
猜你喜欢
  • 2013-01-13
  • 2014-12-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2018-07-06
相关资源
最近更新 更多