透明请求转发(无HTTP重定向)

时间:2015-08-21 09:06:38

标签: php symfony

我有一个要求,应该为每个新会话向用户提供条款和条件。

我写了一个Listener来监听GetResponseEvent,并声明如下:

class: MyProject\CoreBundle\TermsAndConditionsDispatcherListener
arguments: ["@logger"]
tags:
    - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

我基本上按照这个逻辑执行过程:

public function onKernelRequest(GetResponseEvent $event) {
    if (!$event->isMasterRequest()) {
        return;
    }
    $request = $event->getRequest();
    if ($request->getSession()->get("contractAccepted")) {
        return;
    }
    if ($request->getPathInfo() == "/terms/accepted") {
        $event->setResponse(new RedirectResponse($request->getSession()->get("firstRequestUrl")));
    }
    $request->getSession()->set("firstRequestUrl", $request->getUri());
    $event->setResponse(new RedirectResponse("/terms"));        
}

但正如您所看到的,它会执行两个重定向,第一个重定向用户将用户重定向到/terms,第二个重定向到原始请求的网址时接受条款和条件。

有没有办法修改此过程以避免重定向?

我认为:在第一次请求时,我将原始Request对象存储在会话中并构建另一个要处理的对象以显示术语,当用户确认条款和条件时,调用某个URL { {1}},此时原始请求将从sesssion加载并处理。

上述过程是否可行?我的代码怎么样?

0 个答案:

没有答案