Symfony:使用全局变量

时间:2018-06-25 13:50:41

标签: php symfony global-variables

我知道...远离全局变量。

实际上,我确实需要具有一个可以访问的值,并且最重要的是可以从应用程序的不同部分进行可修改。这是我出于调试目的需要监视的某些操作的计数器。搜寻与Symfony和全局变量有关的任何内容,总是让我得到建议使用Container参数或Twig全局变量的结果,但根据Symfony文档,事实是这样:

  

您只能在编译容器之前设置参数:不能在运行时设置。

鉴于我需要控制器中的而不是视野中的Twig全局变量,因此超出了范围。

恕我直言,这两种解决方案更像是常量而不是变量。

因此,问题是:是否有最佳实践来使用Symfony获得我需要的东西,还是应该只使用PHP全局变量?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用私有属性ApplicationGlobals创建一个服务(例如:$counter),并使用公共setter和getter来读取和写入该值。服务类将自动实例化,并且可以在您可以使用容器的任何地方(将其放入控制器或将其作为参数传递给其他服务)访问。

稍后,您将能够在需要时使用适当的getter和setter添加多个变量,并在项目中使用它们。

我认为您甚至可以编写一个在Symfony终止时存储新值的析构函数。 http://symfony.com/doc/current/service_container.html#creating-configuring-services-in-the-container

答案 1 :(得分:0)

为什么不使用 services.yaml 中的参数部分?

似乎您也可以通过编程方式定义/修改变量:

$container->parameters()->set('app.admin_email', 'something@example.com');

https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration https://symfony.com/doc/current/configuration.html#configuration-parameters