Symfony实例化一次服务并将其与多个用户一起使用

时间:2015-04-14 13:32:30

标签: symfony datetime service

我正在尝试执行仅实例化一次的服务。然后在新用户访问我的主页时随时重新使用它。 我想要做的是一次实例化设置日期时间的服务。当任何用户连接到我的主页时,我会向我的服务发送一个日期时间,然后我比较两个日期时间(服务已经实例化的时间和用户之一),如果小时> = 1则执行某些操作。

我的问题是,当我刷新我的主页时,服务的日期时间是现在的时间,而不是我第一次实例化它的时间。似乎当我刷新它重新创建一个新服务时,这不是我想要它做的。我检查了prod和dev,它没有改变任何东西。我有什么方法可以做到这一点,或者服务不是那种方式吗?如果是这样,我怎么能这样做?

谢谢你们的帮助!

1 个答案:

答案 0 :(得分:3)

您无法直接在php中实现此目标。对于php,每个调用(页面刷新)都是一个单独的请求,因此每次调用都会创建一个类的新实例(定义为服务) - 这个新实例对于之前设置日期时间的实例一无所知。

您可以(至少)以两种方式解决此问题:

<强> 1。会话

创建服务类并在会话中存储当前日期时间。下次调用(并实例化)服务时,您将检查先前的请求时间。该解决方案的缺点是会话将超时并且特定于用户,并且据我所知,无论哪个用户调用您的操作,您都希望拥有此功能。见第2号解决方案

<强> 2。持久性

将日期时间保存在某个持久层中 - 例如数据库或文件。然后,您可以从此数据源中读取您的服务,并告知当前和之前请求之间的时差(并且您不必担心用户或会话超时)