错误理解event.listener以检查用户设备

时间:2017-09-29 08:54:31

标签: symfony user-agent

我已经设置了一个简单的侦听器和服务来检查用户是否正在使用移动设备。我很乐意与您分享我的研究成果,以帮助那些不太了解这种方法的人。

我的目标是首先了解我的用户是否正在使用移动设备

然而,我仍然坚持如何操纵这个功能,我真的很难理解它是如何工作的。

这是我的代码

我的service.yml

中的

template.loader:
      class: ST\BackofficeBundle\EventListener\DeviceListener
      tags:
        - { name: kernel.event_listener, event: kernel.exception }

我创建了我的平均听众,以检查用户是否使用了移动设备

class DeviceListener
{
    public function onKernelView(getResponseForExceptionEvent $event)
    {
       $event->getRequest()->getSession()->set('mobile', true);

       $response = new Response();
       $response->setContent($event);

       $event->setResponse($response);
    }
}

我是否应该在这里或在控制器中缺少任何行?

我看到symfony doc $_SERVER ($request->headers->get('User-Agent'))中的这一行应该在我的代码中的哪个地方使用吗?

谢谢

1 个答案:

答案 0 :(得分:2)

如果您想根据User-Agent修改回复,那么我会创建一个kernel.response听众。

因此,在services.yml声明类似

的内容
template.loader:
      class: ST\BackofficeBundle\EventListener\DeviceListener
      tags:
        - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }

这样,您的侦听器将在发送响应之前被调用。当然,您可以根据需要修改您的回复:

public function onKernelResponse(FilterResponseEvent $event)
{
   $response = $event->getResponse();
   $request = $event->getRequest();

   if ($request->headers->get('User-Agent') == 'whatever') {
       $response->setContent('hello');
   }

   $event->setResponse($response);
}

有关内核事件的更多详细信息,请查看this page