【问题标题】:Symfony kernel.controller event send responseSymfony kernel.controller 事件发送响应
【发布时间】:2023-12-09 13:42:01
【问题描述】:

就我阅读 Symfony 文档而言,我在 kernel.controller 事件中找不到任何有关响应处理的信息。

对于kernel.request 事件,文档说:

如果在这个阶段返回了一个响应,进程直接跳到 kernel.response 事件。

但是kernel.controller 事件呢? 如果我在 kernel.controller 事件侦听器中返回响应,则该响应会发送到客户端,但不会取消该进程并调用请求的控制器操作。

是否可以在 kernel.controller 事件中发送响应而不继续请求的控制器?

【问题讨论】:

    标签: httprequest symfony httpresponse


    【解决方案1】:

    间接地,您可以通过更改 FilterControllerEvent 中的控制器。

    您可以使用任何可调用对象作为控制器,前提是它最终返回一个 Response 对象。例如,在您的事件监听器中,您可以执行以下操作:

    $event->setController(function() {
        return new Response();
    });
    

    当然,您可以在控制器中返回任何类型的响应。

    【讨论】:

    • 哦,好吧,所以这个可调用函数是我的“控制器”并返回一个响应。这是要走的路吗?还是有其他一些最佳实践来避免在 kernel.controller 事件之后调用控制器?
    • 这是否是要走的路取决于您的具体用例,我不知道。但这是防止默认控制器在 kernel.controller 事件中执行的方法,除了抛出异常。