php - 从 KernelEvents::CONTROLLER 订阅者返回响应

标签 php symfony symfony-2.8

我正在使用此模式实现 Controller 过滤器:

http://symfony.com/doc/current/event_dispatcher/before_after_filters.html#creating-an-event-listener

但是,我不想抛出 HTTP 异常,而是想返回响应。

我怎样才能做到这一点? SF2 中最好/最可接受的方式是什么?

public function onKernelController(FilterControllerEvent $event)
{
    if (!$event->isMasterRequest()) {
        return;
    }

    $controller = $event->getController();

    // $controller passed can be either a class or a Closure.
    // This is not usual in Symfony but it may happen.
    // If it is a class, it comes in array format
    if (!is_array($controller)) {
        return;
    }

    if ($controller[0] instanceof ResourceServerAuthorizedController) {
        $request = $event->getRequest();

        $response = $this->resourceServer->authorize($request);
        if (!$response->isOk()) {
            return $response; // ??? HERE
        }
    }
}

最佳答案

如果您想出于任何给定原因操纵响应,您可以执行如下操作,其中具有一些通用逻辑。您需要实现您想用它做的任何其他事情。

如果您在 http://www.inanzzz.com/ 中查找 onKernelController网站,您会发现 7 个使用它的示例。

services:
    application_frontend.listener.player:
        class: Application\FrontendBundle\Listener\PlayerListener
        tags:
            - { name: kernel.event_listener, event: kernel.controller, method: onKernelController }

听众

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;

....

    public function onKernelController(FilterControllerEvent $event)
    {
        if (!$event->isMasterRequest()) {
            return;
        }

        $controller = $event->getController();
        if (!is_array($controller)) {
            return;
        }

        if (!$controller[0] instanceof YourController) {
            return;
        }

        $message = 'Bye inanzzz';

        $event->setController(
            function() use ($message) {
                return new Response($message, 200);
            }
        );
    }

....

关于php - 从 KernelEvents::CONTROLLER 订阅者返回响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44020810/

相关文章:

php - 无法识别的配置参数 "dynamic_shared_memory_type"

php - 在 Symfony 中注册来自另一个的包

php - 从使用ajax获取的json创建html

php - PDO 准备好的语句 - 参数名称中的冒号是做什么用的?

PHP,验证用户提交的具有特定域的 URL

doctrine-orm - Symfony2 - 有没有办法在实体中创建虚拟字段?

php - Symfony 2.8 无法写入/var/lib/php/sessions/

Symfony2 JMS Serializer - 修改某些值

PHP - 每周显示 1 条随机记录

php - php 7.4 写入变量中的 Twig 问题