Symfony2事件侦听器和获取对内核、请求和响应的访问?

Symfony2事件侦听器和获取对内核、请求和响应的访问?,symfony,Symfony,我真的很难理解这一点,现在我只是在兜圈子 我读了尽可能多的手册,付了视频教程的钱,搜索了谷歌和YouTube,但就是不能让它工作 我只是尝试设置一个侦听器,在每次请求之前激活它。我可以做到这一点,但我的问题是如何访问我需要的各种其他部件 下面是一个例子,但我认为现在只有实际的代码可以帮助我理解这一点 如果有人能填空,我将不胜感激。这只是一个例子,但每一部分都会向我解释我需要知道什么 在config.yml中: services: kernel.listener.request_liste

我真的很难理解这一点,现在我只是在兜圈子

我读了尽可能多的手册,付了视频教程的钱,搜索了谷歌和YouTube,但就是不能让它工作

我只是尝试设置一个侦听器,在每次请求之前激活它。我可以做到这一点,但我的问题是如何访问我需要的各种其他部件

下面是一个例子,但我认为现在只有实际的代码可以帮助我理解这一点

如果有人能填空,我将不胜感激。这只是一个例子,但每一部分都会向我解释我需要知道什么

在config.yml中:

services:
    kernel.listener.request_listener:
        class: Acme\Bundle\NewBundle\EventListener\RequestListener
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
        arguments: [ '@service_container' ]
班级:

namespace Acme\Bundle\NewBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
***do I need to 'use' any others here?***

class RequestListener
{

public function onKernelRequest($container) {

    //reference to these: http://api.symfony.com/2.1/Symfony/Component/HttpKernel/Event/KernelEvent.html
    $kernel =

    //reference to the Request object
    $request = $kernel->getRequest();

    //reference to the Response object
    $response =

    //options:
    //  (1)   continue to run usual content
    //  (2)   stop execution and output a message
    //  (3)   set cookie and continue to run usual content
    switch( $request->query->get('option') ) {

        case 1:
            return
        case 2:

            $this->setResponse("hello, message here");

            break;
        case 3:
            // *** not sure if this is the way to do it ***
            $response->headers->setCookie(new Cookie("test", 1));
            break;

    }

}

}
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpFoundation\Response;

class MyListener
{
   public function onKernelRequest(GetResponseEvent $event)
   {
       $request = $event->getRequest();
       if ($request->query->get('option') == 2) {
           $event->setResponse(new Response("hello, message here"));
       }
   }

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

       if ($request->query->get('option') == 3) {
           $response->headers->setCookie(new Cookie("test", 1));
       }
    }
}

您的
服务中几乎没有错误。yml

为了使代码正常工作,应该如下所示

services.yml

My\AwesomeBundle\Listener\MyListener.php


似乎您并不了解symfony2 dic是如何工作的。 您的
内核.request
侦听器只能处理情况1和2。对于案例3,您应该使用
kernel.response
event

services:
   listener.requestresponse:
     class: Acme\Bundle\NewBundle\EventListener\RequestListener
     tags:
       - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
       - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
班级:

namespace Acme\Bundle\NewBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
***do I need to 'use' any others here?***

class RequestListener
{

public function onKernelRequest($container) {

    //reference to these: http://api.symfony.com/2.1/Symfony/Component/HttpKernel/Event/KernelEvent.html
    $kernel =

    //reference to the Request object
    $request = $kernel->getRequest();

    //reference to the Response object
    $response =

    //options:
    //  (1)   continue to run usual content
    //  (2)   stop execution and output a message
    //  (3)   set cookie and continue to run usual content
    switch( $request->query->get('option') ) {

        case 1:
            return
        case 2:

            $this->setResponse("hello, message here");

            break;
        case 3:
            // *** not sure if this is the way to do it ***
            $response->headers->setCookie(new Cookie("test", 1));
            break;

    }

}

}
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpFoundation\Response;

class MyListener
{
   public function onKernelRequest(GetResponseEvent $event)
   {
       $request = $event->getRequest();
       if ($request->query->get('option') == 2) {
           $event->setResponse(new Response("hello, message here"));
       }
   }

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

       if ($request->query->get('option') == 3) {
           $response->headers->setCookie(new Cookie("test", 1));
       }
    }
}