Symfony 一次实例化一个服务并与多个用户一起使用
Symfony instantiate a service one time and use it with several users
我正在尝试做一个只实例化一次的服务。然后当新用户访问我的主页时,我可以随时重新使用它。
我正在尝试做的是一个实例化后设置日期时间的服务。当任何用户连接到我的主页时,我会向我的服务发送一个日期时间,然后比较两个日期时间(服务实例化时的日期时间和用户的日期时间),如果小时 >= 1 则执行某些操作。
我的问题是,当我刷新主页时,服务的日期时间是现在的时间,而不是我第一次实例化它时的时间。似乎当我刷新时它会重新创建一个新服务,而这不是我想要它做的。我检查了 prod 和 dev,它没有改变任何东西。有什么办法可以做到这一点,或者这些服务不应该以这种方式工作吗?如果是这样,我该怎么做?
谢谢大家的帮助!
无法直接在php
中实现。对于 php
,每次调用(页面刷新)都是一个单独的请求,因此每次调用都会创建一个 class 的新实例(定义为服务)——这个新实例对前一个设置了日期时间的实例一无所知。
你可以(至少)通过两种方式解决这个问题:
1.会话
创建您的服务class并在会话中存储当前日期时间。下次调用(和实例化)您的服务时,您将检查之前的请求时间。这个解决方案的缺点是会话会超时并且是特定于用户的,据我所知,无论哪个用户调用你的操作,你都希望拥有这个。参见解决方案编号 2
2。坚持
将您的日期时间保存在某个持久层中 - 例如数据库或文件。然后你可以从这个数据源中读取你的服务,并告诉你当前和上一个请求之间的时间差是多少(你不用担心用户或会话超时)
我正在尝试做一个只实例化一次的服务。然后当新用户访问我的主页时,我可以随时重新使用它。 我正在尝试做的是一个实例化后设置日期时间的服务。当任何用户连接到我的主页时,我会向我的服务发送一个日期时间,然后比较两个日期时间(服务实例化时的日期时间和用户的日期时间),如果小时 >= 1 则执行某些操作。
我的问题是,当我刷新主页时,服务的日期时间是现在的时间,而不是我第一次实例化它时的时间。似乎当我刷新时它会重新创建一个新服务,而这不是我想要它做的。我检查了 prod 和 dev,它没有改变任何东西。有什么办法可以做到这一点,或者这些服务不应该以这种方式工作吗?如果是这样,我该怎么做?
谢谢大家的帮助!
无法直接在php
中实现。对于 php
,每次调用(页面刷新)都是一个单独的请求,因此每次调用都会创建一个 class 的新实例(定义为服务)——这个新实例对前一个设置了日期时间的实例一无所知。
你可以(至少)通过两种方式解决这个问题:
1.会话
创建您的服务class并在会话中存储当前日期时间。下次调用(和实例化)您的服务时,您将检查之前的请求时间。这个解决方案的缺点是会话会超时并且是特定于用户的,据我所知,无论哪个用户调用你的操作,你都希望拥有这个。参见解决方案编号 2
2。坚持
将您的日期时间保存在某个持久层中 - 例如数据库或文件。然后你可以从这个数据源中读取你的服务,并告诉你当前和上一个请求之间的时间差是多少(你不用担心用户或会话超时)