【问题标题】:Symfony 2: Who is the caller of action methods?Symfony 2:动作方法的调用者是谁?
【发布时间】:2021-04-13 21:21:54
【问题描述】:

在 Symfony 2 中,我们在控制器类中实现的这些操作方法在哪里调用?

我想做的是观察或修改所有操作方法返回的响应对象。

[已解决]

为了我的目的,为了观察和修改动作方法返回的响应,我不需要找出谁在调用动作方法,但我只需要为 kernel.response(和 kernel.view)创建一个事件侦听器.

【问题讨论】:

  • HttpKernel::handleRaw 是大部分控制器魔法发生的地方。这不是最容易阅读的代码,但是一旦你理解了它,那么 Symfony 如何实际实现它的请求动作响应范式就变得清晰了。比努力更值得。如果您想修改 Response 对象,那么您可能需要一个 kernel.response 监听器,如事件文档中所述。
  • @Cerad 感谢您的评论。我可以通过使用 kernel.response 来做我想做的事情。我正在采用另一种方式,这也应该可以解决我的问题,但是您节省了我很多时间,因为我不必深入研究框架源代码!

标签: php symfony controller frameworks


【解决方案1】:

Symfony 2 版本已被弃用,并且自 2019 年以来(甚至更早,取决于版本)不再维护。 某些核心组件存在安全问题!引起您的注意,以下是您问题的答案:

Symfony 控制器动作通常映射在 routing.yml 中,并从框架中神奇地调用 :)。取决于你的 Symfony 应用程序是如何构建的......在 Symfony 2.x 应用程序中添加路由条目的最常见方式是:

  • 在应用程序默认 routing.yml 文件中添加的条目。在某些情况下,您会在主应用程序文件夹“PATH_TO_YOUR_SYMFONY_APP_FOLDER/app/config/routing.yml”中找到添加的条目。
  • 它们也可以添加到 Symfony 包“PATH_TO_YOUR_BUNDLE_FOLDER/Resources/config/routing.yml”中。
  • 路由条目也可以直接在控制器操作中使用@Annotations 进行映射

更多信息请查看官方 Symfony 文档:https://symfony.com/doc/2.8/routing.html

希望这会有所帮助。

【讨论】:

  • 感谢您的评论。不幸的是,我们需要使用废弃的 Symfony 版本来维护这个软件。必须有一个实际的类或某种基类来调用控制器类实例的那些操作方法。你知道这是什么课吗?您提到“从框架中神奇地调用”,但是,没有神奇之处,我相信框架中的某些类可以完成这项工作。
  • 软件开发中的一切都取决于意图。在使用框架时,在本例中是 Symfony,其目的是让框架发挥作用。开发人员应该关注应用程序的业务逻辑。在调用控制器操作方法之前,您的 Symfony 框架遵循哪个工作流程,这是一个复杂的工作流程:) 并且不相关(只要不打算自己构建框架)。在触发控制器操作之前,框架内有超过 100 个(或更多调用)。如果路线是公开的还是用户应该登录,这也取决于很多......
  • 很大程度上取决于控制器操作是否正在注入参数,这意味着框架内的调用会更多。每种情况都可能不同...在调用 Action Method 之前,不同 Symfony 组件中的调用肯定有 100 多个而不是 1000 多个。只要您不打算学习框架是如何构建的,就不应将您的注意力从业务逻辑中移开……
  • 我想我已经接近了。一旦我找到我的解决方案,我会在这里发布。 @alieni,是的,你是对的。看来注释是这个的关键。
猜你喜欢
  • 1970-01-01
  • 2017-03-25
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多