繁体   English   中英

Symfony 2.8 全局变量

[英]Symfony 2.8 Global variable

我正在使用 Symfony 2.8,但没有找到任何可以解决我的问题的方法。

为简单起见,我有一个 Payment 实体,我需要一个用于 VAT 的全局变量。

我的问题是:有没有办法让我的所有支付实体都有一个公共变量,知道它可以由管理员稍后在 Web 应用程序中修改? 我认为服务参数(我正在使用)不会成功。 至少,我没有找到任何关于如何动态修改它的信息。

这是我的 service.yml 的一部分:

parameters:
    app_tva: 20

在 Symfony 中使用真正的全局变量( global $parameter )——这是个坏主意,因为所有系统都在范围内工作(请求、控制台等...),并且每个范围都有针对此范围的自定义服务(例如@request )。

但是,如果您想在应用程序中使用 config 参数,则可以使用:

解决方案#1(使用app/config/parameters.yml ):

如果参数不是动态的,并且很少更改,则此解决方案变化良好。

  1. parameters.yml添加自定义parameters.yml
  2. 从容器$container ->getParameter('some_parameter')获取这个参数

解决方案#2(对自定义参数使用工厂服务)

在我的应用程序中,我使用自定义层来配置公共服务,因为许多参数是动态的,并且可以针对每个请求或用户或其他条件进行更改。

  1. 创建工厂服务Acme\\DemoBundle\\Config\\AppConfig作为示例。
  2. 将方法getVat添加到此服务。
  3. 在服务容器中注册服务。
  4. 将此服务注入另一个服务,您必须在其中访问配置层。

解决方案 #3(使用 Doctrine 事件)

所以,这不是一个好主意,但可以在任何系统中工作。

如果您想计算价格,或其他实体操作,您可以在完成加载实体后注入自定义参数。

注意:此方法仅在通过学说加载实体后才有效!

  1. Doctrine ORM创建自定义侦听器/订阅器
  2. postLoad事件中向您的实体注入自定义变量。
  3. 将侦听器/订阅者注册为服务,并添加标签doctrine.event_subscriberdoctrine.event_listener

聚苯乙烯

我会使用解决方案#2,因为这是一个很好的变体,我们可以将这个参数存储在任何地方(数据库、redis、parameters.yml 等),我们可以为每个条件(请求、用户、国家、时区等...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM