Symfony Kernel Events

By | 23 November 2016

Symfony içinde gelen istek ve cevapları, dinleyip, aksiyon alabileceğimiz HttpKernel modülü bulunur. HttpKernel istek veya cevap süreci boyunca olaylar fırlatır ve bu olaylara göre işlemler yaptırabiliriz. Bunlara Kernel Events(çekirdek olayları) denir.  Şimdi bunlardan bazılarına değineceğim. Senaryolarınıza göre bunları kullanmaya başlayabilirsiniz.

kernel.view

Normalde Symfony Controller içindeki herhangi bir action Response objesinden bir veri döndürmelidir. Eğer döndürmezse hata alınabilir. Controller Response objesinden veri dönmediği zaman kernel.view tetikleniyor, kernel.view olayını kullanırsak tüm Controller içindeki Response objesinden olmayan, dönen değerleri buradan yönetebiliriz ve Response objesinden döndürebiliriz. Mesela aşağıdaki örnekte dönen tüm değerler Json formatında return ediliyor.

use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
use Symfony\Component\HttpFoundation\Response;

public function onKernelView(GetReponseForControllerResultEvent $event)
{
    $data = $event->getControllerResult();

    $event->setResponse(new JsonResponse($data));
}

kernel.request

Kullanıcının web tarayıcısı sistemimize isteği attığında tetiklenen olay burası. İstek bilgiler, kullanıcı bilgileri veya isteğin loglanacaksa istenilen bilgileri buradan alınıp, kullanılabilir. İsteğin Http Method’u ve istek bilgilerini aşağıdaki örnekteki gibi görebilirsiniz.

use Symfony\Component\HttpKernel\Event\GetResponseEvent;

public function onKernelRequest(GetResponseEvent $event)
{
    $request = $event->getRequest();
    $method = $event->getRequest()->getMethod();
}

kernel.response

kernel.response da kernel.view’a benziyor diyebiliriz.
Yalnız burada Controller’da dönen verinin türü/tipi farketmeyecek şekilde
burası tetikleniyor. Dönen değeri aldıktan sonra senaryoya göre işlemler yapılabilir.

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

 

kernel.exception

Sistemimizde herhangi bir exception fırlatıldığında kernel.exception olayı tetiklenir ve biz araya girerek burada düzenlemeler yapabiliriz. Örneğin aşağıda AuthenticationException fırlatılmışsa 401, değilse hata kodlarını ExceptionWrapper ile düzenliyoruz.

public function onKernelException(GetResponseForExceptionEvent $event)
{
    $exception = $event->getException();

    $wrapper = new ExceptionWrapper();
    $wrapper->setMessage($exception->getMessage());
    $wrapper->setCode($exception->getCode());

    if ($exception instanceof AuthenticationException)
        $wrapper->setStatusCode(401);

    $wrapper->setTrace($exception->__toString());

    $event->setResponse($wrapper->getResponse());
}

Kullandıkça hız, güvenlik ve performans açısından size katkı sağlayacaklardır. Ayrıca HttpKernel’in tüm olaylarını aşağıdaki tabloda görebilirsiniz. Anlatacaklarım şimdilik bu kadar, bir dahaki yazımda görüşmez üzere… 🙂

screen-shot-2016-11-23-at-4-24-41-pm

Leave a Reply

Your email address will not be published. Required fields are marked *

*