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


控制器中是否有可能获取请求类型?怎么样?


2794
2017-07-17 10:50


起源



答案:


要检测请求是否为主服务器,需要使用 RequestStack,应该注入你的控制器。请求堆栈有3种有用的方法

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

getParentRequest() 如果当前请求是主服务器,则将始终返回null。


13
2018-02-14 04:28





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

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

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

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

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

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


2
2017-10-28 21:33





容易,只需拨打电话 getMethod() 你的方法 Request 目的:

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

这将返回当前请求的HTTP方法,例如 GETPOSTPUT 要么 DELETE


-2
2017-07-17 12:29



野应。我的意思是:这是请求主或子请求吗? - Koc
好的,抱歉。在那种情况下,你将不得不挂钩 kernel.request 事件并检查是否 $event->getRequestType() 等于 HttpKernelInterface::MASTER_REQUEST 要么 HttpKernelInterface::SUB_REQUEST。 - igorw
@igorw,你应该用你在评论中给出的答案更新你的帖子,这样就可以投票了。人们不会回答不回答问题的答案。 - Quentin


答案:


要检测请求是否为主服务器,需要使用 RequestStack,应该注入你的控制器。请求堆栈有3种有用的方法

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

getParentRequest() 如果当前请求是主服务器,则将始终返回null。


13
2018-02-14 04:28





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

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

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

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

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

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


2
2017-10-28 21:33





容易,只需拨打电话 getMethod() 你的方法 Request 目的:

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

这将返回当前请求的HTTP方法,例如 GETPOSTPUT 要么 DELETE


-2
2017-07-17 12:29



野应。我的意思是:这是请求主或子请求吗? - Koc
好的,抱歉。在那种情况下,你将不得不挂钩 kernel.request 事件并检查是否 $event->getRequestType() 等于 HttpKernelInterface::MASTER_REQUEST 要么 HttpKernelInterface::SUB_REQUEST。 - igorw
@igorw,你应该用你在评论中给出的答案更新你的帖子,这样就可以投票了。人们不会回答不回答问题的答案。 - Quentin