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

Symfony 错误理解event.listener以检查用户设备,symfony,user-agent,Symfony,User Agent,我已经设置了一个简单的侦听器和服务来检查用户是否正在使用移动设备。我将很高兴地与大家分享我的研究成果,以帮助那些不太容易理解这种方法的人 我的目标是知道我的用户一开始是否在使用移动设备 然而,我被困在如何操作这个函数,我真的很难理解它是如何工作的 这是我的密码 在我的服务中.yml template.loader: class: ST\BackofficeBundle\EventListener\DeviceListener tags: - { name:

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

我的目标是知道我的用户一开始是否在使用移动设备

然而,我被困在如何操作这个函数,我真的很难理解它是如何工作的

这是我的密码

在我的
服务中.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);
    }
}
我应该在这里或控制器中执行的操作是否缺少任何行

我在
$\u服务器($request->headers->get('User-Agent'))中看到了这一行。
我应该在代码中的某个地方使用它吗


谢谢

如果您想根据
用户代理
修改您的响应,那么我将创建一个
内核.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);
}

有关内核事件的更多详细信息,请参阅。

如果要根据
用户代理修改响应,我将创建
内核.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);
}

有关内核事件的更多详细信息,请参阅。

您的目标是什么?是否要根据用户代理修改响应?Hi@DrKey我的目标是检测用户是否正在使用移动设备,然后发送一个专门用于移动设备的模板。但首先我需要知道如何知道用户是否在使用移动设备。这就是为什么我试着用一个服务做一个简单的事件监听器……我被困在这里,想知道如何知道用户是否有手机。我想也许我需要在控制器里写东西?我的听众缺少很多东西?你的目标是什么?是否要根据用户代理修改响应?Hi@DrKey我的目标是检测用户是否正在使用移动设备,然后发送一个专门用于移动设备的模板。但首先我需要知道如何知道用户是否在使用移动设备。这就是为什么我试着用一个服务做一个简单的事件监听器……我被困在这里,想知道如何知道用户是否有手机。我想也许我需要在控制器里写东西?我的听众缺少多少东西?