Symfony 2.8全局变量

时间:2016-04-20 09:02:51

标签: php symfony

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

为简单起见,我有一个Payment实体,我需要有一个增值税的全局变量。

我的问题是:有没有办法让所有我的付款实体都有一个公共变量,知道以后管理员可以在网络应用程序中对其进行修改?我不认为服务参数(我正在使用)将成为它。至少,我没有找到任何关于如何动态修改它的内容。

这是我service.yml的一部分:

parameters:
    app_tva: 20

1 个答案:

答案 0 :(得分:1)

在Symfony中使用真正的全局变量(global $parameter) - 这是一个不同的坏主意,因为所有系统都在范围内工作(请求,控制台等等),并且每个范围都有此范围的自定义服务({ {1}}例如。)

但是,如果你想在你的应用程序中使用config参数,那么你可以使用:

解决方案#1(使用@request):

  

如果参数不是动态的,并且很少更改,则此解决方案会有所不同。

  1. app/config/parameters.yml
  2. 中添加自定义参数
  3. 从容器parameters.yml
  4. 获取此参数

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

      

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

    1. 以工厂服务$container ->getParameter('some_parameter')为例。
    2. 将方法Acme\DemoBundle\Config\AppConfig添加到此服务。
    3. 在服务容器中注册服务。
    4. 将此服务注入另一个服务,您必须访问配置层。
    5. 解决方案#3(使用学说事件)

        

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

           

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

           

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

      1. Doctrine ORM
      2. 创建自定义侦听器/订阅者
      3. getVat事件中向您实体注入自定义变量。
      4. 将侦听器/订阅者注册为服务,并添加标记postLoaddoctrine.event_subscriber
      5. <强> P.S。

        我会使用Solution#2,因为这是一个不同的好变种,我们可以将这个参数存储在任何地方(database,redis,parameters.yml等),我们可以为每个条件更改此参数(请求,用户,国家,时区等......)