2017-09-29 6 views
0

ユーザーがモバイルデバイスを使用しているかどうかを確認するための単純なリスナーとサービスを設定しました。私は、この方法を非常に簡単に理解できない人を助けるために、喜んで私の研究をあなたに教えてくれるでしょう。ユーザーデバイスを確認するevent.listenerの誤解

私の目標は、私のユーザーがモバイルデバイスを使用しているか

最初

でしかし、私はこの機能を操作する方法でこだわっていないかどうかを知ることがあり、私は実際にそれがどのように機能するかを理解するのに苦労していました。ここで

は私のコードは、私は、ユーザーが

モバイル

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

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

     $event->setResponse($response); 
    } 
} 
を使用しているかどうかを確認するために作成したマイさえリスナーがいずれかがあります私の service.yml

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

です私がここやコントローラで行うべき行方不明?

symfony doc$_SERVER ($request->headers->get('User-Agent'))にこの行がありますが、これは私のコードのどこかで使用してください。

あなたはUser-Agentに応じて、あなたの応答を変更したい場合は、私はkernel.responseリスナーを作成し、あなたに

+0

あなたの目標は何ですか? 'User-Agent'に応じてレスポンスを変更しますか? – DrKey

+0

こんにちは@DrKey私の目標は、ユーザーがモバイルデバイスを使用しているかどうかを検出して、モバイル向けのテンプレートを送信することです。しかし、まず、ユーザーがモバイルデバイスを使用しているかどうかを知る必要があります。だからこそ私はサービスでシンプルなイベントリスナーを作ろうとしていたのですが.....私はユーザーがモバイルを持っているかどうかを知る方法を知るためにここにこだわっています。私は多分コントローラーに物事を書く必要があると思った?私のリスナーには物事がないのですか? –

答えて

2

に感謝します。

はそのためにあなたの 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を見てみましょう:もちろん、あなたが必要としてあなたの応答を変更することができます。