如何在Symfony2控制器中获取请求类型(主/从)?

如何在Symfony2控制器中获取请求类型(主/从)?

问题描述:

有没有可能在控制器中获取请求类型?怎么样?如何在Symfony2控制器中获取请求类型(主/从)?

要检测请求是否为主,需要使用RequestStack,这应该注入到控制器中。请求堆具有3种有用的方法

getCurrentRequest(); 
getMasterRequest(); 
getParentRequest(); 

getParentRequest()将总是返回null如果当前请求是主。

非常容易,只要打电话给你Request对象的getMethod()方法:

$method = $this->get('request')->getMethod(); 

这将返回当前请求的,例如HTTP方法GETPOSTPUTDELETE

+3

Noo。我的意思是:这是请求主或子请求? – Koc

+17

好的,对不起。在这种情况下,您必须挂钩到'kernel.request'事件并检查$ event-> getRequestType()是否等于'HttpKernelInterface :: MASTER_REQUEST'或'HttpKernelInterface :: SUB_REQUEST'。 – igorw

+0

@igorw,你应该用你在评论中给出的答案更新你的帖子,以便它可以被提升。人们不回答不回答问题的答案。 – Quentin

我一直在寻找这个东西,它似乎只是传递,所以似乎没有一个地方知道它是什么。

我想解决这个问题的方法是创建一个简单的kernel.request侦听器,它只是向请求添加一个属性。下面粗(未经测试)代码:

public function onKernelRequest(GetResponseEvent $event) 
{ 
    $event->getRequest()->attributes->set('_request_type', $event->getRequestType()); 
} 

然后在控制器,你应该能够做到:

$requestType = $this->getRequest()->attributes->get('_request_type'); 

再次,这是未经测试。您需要写出完整的监听器类并将其添加到服务配置文件中,但除此之外,我认为这将起作用。