会话和请求对象困境

时间:2015-07-04 16:14:12

标签: php symfony architecture

通过Request对象在SF2中检索会话。嗯,当考虑某种体系结构时,这会成为一种问题 - 在需要从服务中访问会话变量的情况下。

或者,或许,我在这件事上不太正确? (希望如此)。

显然,用户通过webbrowser 发出的每个请求都是一个请求。因此,只要我们在标准SF2中使用控制器操作,我们就有Request。但是,我们是否应该将Request对象传递给我们需要的任何服务?

将Request对象传递给需要运行其方法的所有服务(例如存储信息,检查设置,放置用于显示数据的过滤器等等) - 在一些较大的应用程序中,它们相当多! )因为依赖服务需要 ,对我来说似乎是一个非常愚蠢的想法。它也打破了" S"在S.O.L.I.D.建议OOP。

所以我得出了一个结论,我需要:

  1. 将请求obj传递给许多服务只是因为依赖服务可能需要某些数据(即已损坏" S" as以上)

  2. 每次我需要在每个控制器操作中检索并处理来自Request的数据(即代码重复) - 在这种情况下,我不会传递Request obj,但之前准备所需的所有数据 - 但是我必须在几乎所有控制器中的许多动作方法中执行它(从Request检索/处理数据只是对另一个服务的简单调用,但它不是集中的)

  3. 我提出这个问题,因为我有例如要解决以下问题:

    1. 我在整个页面上对所有不同的数据(来自不同的数据源)使用相同的过滤器。

    2. 可以启用和禁用过滤器 - 应该记住单个会话的所有页面

    3. 我决定拯救"禁用"过滤到会话可能是最好的方法(因为默认情况下应该看到所有数据,即所有过滤器应该在"启用"状态)

    4. 第3点 - 将数据(过滤器)保存到会话 - 是SF2中出现问题的原因,如上所述。为了在页面上显示过滤数据,我需要访问会话,从而访问Request obj。这意味着我很难保持" S"在SOLID中,因为依赖于服务的方法总是将Request obj传递给它。

      是否还有其他更好的解决方案(即一个,破解SOLID,或两个代码重复)?

1 个答案:

答案 0 :(得分:2)

会话也是symfony di容器中的一项服务,你可以简单地将会话注入你的服务