Php 从内核事件侦听器返回响应
我使用的是OAuth2服务器包,我想对控制器中所有方法的用户进行身份验证。它与文档中的用例非常相似,只是我想返回响应,而不是抛出异常Php 从内核事件侦听器返回响应,php,symfony,Php,Symfony,我使用的是OAuth2服务器包,我想对控制器中所有方法的用户进行身份验证。它与文档中的用例非常相似,只是我想返回响应,而不是抛出异常 onKernelControllerwithFilterControllerEvent允许我访问控制器,以便访问OAuth2服务器包的响应方法。但我不能在那里回复任何回复。我可以使用GetResponseEvent在onKernelController中返回响应,但它在onKernelController之前被调用 我也查看了kernel.exception,但是
onKernelController
withFilterControllerEvent
允许我访问控制器,以便访问OAuth2服务器包的响应方法。但我不能在那里回复任何回复。我可以使用GetResponseEvent
在onKernelController
中返回响应,但它在onKernelController
之前被调用
我也查看了kernel.exception
,但是getResponse()
返回不同的错误消息,所以我不只是抛出一个模棱两可的异常
对于我正在努力实现的目标,最佳实践是什么
这是我的代码:
public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();
if ($controller[0] instanceof \Foo\Bundle\AuthBundle\Controller\TokenAuthenticatedController) {
$server = $controller[0]->get('oauth2.server');
$request = $controller[0]->get('oauth2.request');
$response = $controller[0]->get('oauth2.response');
if (!$server->verifyResourceRequest($request, $response)) {
return $server->getResponse();
}
}
}
public function onKernelRequest(GetResponseEvent $event)
{
$event->setResponse(new Response('Some response', 501));
}
在EventListener方法中,您不能返回响应,但必须在事件本身上设置响应 问题在于事件
FilterControllerEvent
无法管理返回的响应,因此更好的方法是管理(侦听)可以设置响应并停止传播的位置
希望这有帮助。你已经看到了吗?没有。但这正是我不想做的。例如,在FilterController中抛出一个异常,并在OnKerneleException中拾取它。但这似乎是一种“正确”的方式。感谢您发布这篇文章。当然,问题是您无法设置您试图管理的事件的响应,请检查您是否可以管理
GetResponseForControllerResultEvent
事件。希望如此help@Matteo当前位置请随意将其作为答案发布,我将接受。似乎就是这样做的。不过要小心:GetResponseForControllerResultEvent
仅在控制器未返回响应
对象时才会触发。这也意味着无论事件侦听器在做什么,控制器总是被调用的,因为它只是在之后才被调用。