2017-09-29 1 views
0

Ich habe einen einfachen Listener und Dienst eingerichtet, um zu überprüfen, ob der Benutzer ein mobiles Gerät verwendet. Gerne teile ich Ihnen meine Recherchen mit, um anderen zu helfen, die diese Methode nicht so leicht verstehen.Missverständnis von event.listener, um Benutzergerät zu überprüfen

Mein Ziel ist zu wissen, wenn mein Benutzer ein mobiles Gerät verwendet oder nicht auf dem ersten

aber ich bin fest, wie diese Funktion zu manipulieren, ich hatte wirklich eine harte Zeit zu verstehen, wie das funktioniert.

Hier ist mein Code

in meinem service.yml

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

ich meine sogar Hörer erstellt, wenn der Benutzer zu überprüfen, eine mobile

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

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

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

Gibt es verwendet fehlt die Zeile, die ich hier oder in einem Controller machen sollte?

ich sah dort ist diese Linie in der symfony doc sollte ich es irgendwo in meinem Code verwenden?

danke

+0

Was ist Ihr Ziel? Möchten Sie die Antwort nach 'User-Agent' ändern? – DrKey

+0

Hi @DrKey Mein Ziel ist es, festzustellen, ob der Benutzer ein mobiles Gerät verwendet und dann eine Vorlage speziell für mobile senden. Aber zuerst muss ich wissen, ob der Benutzer ein mobiles Gerät verwendet. Deshalb habe ich versucht, einen einfachen Event-Listener mit einem Service zu erstellen und ..... ich bin hier festgefahren, um zu wissen, ob der Benutzer ein Handy hat. Ich dachte, vielleicht muss ich Dinge in den Controller schreiben? von Dingen fehlt in meinem Zuhörer? –

Antwort

2

Wenn Sie nach User-Agent ändern Ihre Antwort wollen, dann würde ich einen kernel.response Zuhörer erstellen.

daher in Ihrem services.yml erklären so etwas wie

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

Auf diese Weise wird Ihre Zuhörer gerade vor dem Senden Antwort aufgerufen werden.

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

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

    $event->setResponse($response); 
} 

Für detailliertere Informationen über Kernel-Ereignisse, werfen Sie einen Blick auf this page

: Natürlich können Sie Ihre Antwort, wie Sie benötigen ändern.