Session 和 Request 对象的困境
Session and Request object dilemma
会话是通过请求对象在 SF2 中检索的。嗯,当考虑到某些架构时,这会有点问题——在需要从服务内部访问会话变量的情况下。
或许,我在这件事上不太正确? (希望如此)。
显然,用户通过网络浏览器发出的每个请求都是一个请求。所以只要我们在标准 SF2 中使用控制器动作,我们就有 Request。但是我们是否应该将 Request 对象传递给我们需要的任何服务?
将请求对象传递给所有需要其方法的服务 运行(例如,存储信息、检查设置、放置用于显示数据的过滤器等 - 在一些较大的应用程序中,它相当多他们!)因为它 可能 由于依赖服务而被需要,这对我来说似乎是一个非常愚蠢的想法。它还违反了 S.O.L.I.D. 中针对 OOP 的建议 "S"。
所以我得出一个结论,我需要:
将请求对象传递给许多服务只是因为依赖服务可能需要来自它的一些数据(即如上破"S")
每次我需要在每个控制器操作(即代码重复)中从请求中检索和处理数据 - 在这种情况下我不传递请求对象,但事先准备好所有需要的数据 -但是我必须在几乎所有控制器的许多操作方法中这样做(retrieving/processing 来自请求的数据只是对另一个服务的简单调用,但它不是集中的)
我提出这个问题,因为我有例如解决以下问题:
我对整个页面上的所有不同数据(来自不同数据源)使用相同的过滤器。
可以启用和禁用过滤器 - 应该为单个会话的所有页面记住它们
我决定将 "disabled" 过滤器保存到会话中可能是最好的方法(因为默认情况下应该看到所有数据,即所有过滤器都应该处于 "enable" 状态)
如上所述,第三点 - 将数据(过滤器)保存到会话 - 是 SF2 中的麻烦所在。为了在页面上显示过滤后的数据,我需要访问会话,从而访问请求对象。这意味着我很难将 "S" 保持在 SOLID 中,因为依赖服务的方法总是将 Request obj 传递给它。
有没有比上面提到的 2 个更好的解决方案(即一个,破坏 SOLID,或者两个,代码重复)?
session也是symfony di容器中的一个服务,你可以简单地将session注入到你的servives中
会话是通过请求对象在 SF2 中检索的。嗯,当考虑到某些架构时,这会有点问题——在需要从服务内部访问会话变量的情况下。
或许,我在这件事上不太正确? (希望如此)。
显然,用户通过网络浏览器发出的每个请求都是一个请求。所以只要我们在标准 SF2 中使用控制器动作,我们就有 Request。但是我们是否应该将 Request 对象传递给我们需要的任何服务?
将请求对象传递给所有需要其方法的服务 运行(例如,存储信息、检查设置、放置用于显示数据的过滤器等 - 在一些较大的应用程序中,它相当多他们!)因为它 可能 由于依赖服务而被需要,这对我来说似乎是一个非常愚蠢的想法。它还违反了 S.O.L.I.D. 中针对 OOP 的建议 "S"。
所以我得出一个结论,我需要:
将请求对象传递给许多服务只是因为依赖服务可能需要来自它的一些数据(即如上破"S")
每次我需要在每个控制器操作(即代码重复)中从请求中检索和处理数据 - 在这种情况下我不传递请求对象,但事先准备好所有需要的数据 -但是我必须在几乎所有控制器的许多操作方法中这样做(retrieving/processing 来自请求的数据只是对另一个服务的简单调用,但它不是集中的)
我提出这个问题,因为我有例如解决以下问题:
我对整个页面上的所有不同数据(来自不同数据源)使用相同的过滤器。
可以启用和禁用过滤器 - 应该为单个会话的所有页面记住它们
我决定将 "disabled" 过滤器保存到会话中可能是最好的方法(因为默认情况下应该看到所有数据,即所有过滤器都应该处于 "enable" 状态)
如上所述,第三点 - 将数据(过滤器)保存到会话 - 是 SF2 中的麻烦所在。为了在页面上显示过滤后的数据,我需要访问会话,从而访问请求对象。这意味着我很难将 "S" 保持在 SOLID 中,因为依赖服务的方法总是将 Request obj 传递给它。
有没有比上面提到的 2 个更好的解决方案(即一个,破坏 SOLID,或者两个,代码重复)?
session也是symfony di容器中的一个服务,你可以简单地将session注入到你的servives中