Symfony : Kernel Events

mehmet soylu
2 min readFeb 2, 2021

--

Buradan sonra Symfony dokumaninin yuzeysel bir cevirisi olacak. Bu yazilari kendim anlamak icin yazdigimi hatirlatirim ve ona gore okumanizi tavsiye ederim. Yanlis / eksik oldugunu dusundugunuz yerler icin yorum yazabilirsiniz. Vaktim oldukca duzeltecegim.

Symfony cekirdeginin belli olaylari var. Bunlar sunlar;

  • kernel.request
  • kernel.controller
  • kernel.controller_arguments
  • kernel.view
  • kernel.response
  • kernel.finish_request
  • kernel.terminate
  • kernel.exception

Bu eventler sadece HTTPKernal compenent kullanan bir uygulama icin de gecerli.

Tum eventler extend edildikleri bir ana sinifa sahip ve bu ana sinif

Symfony\Component\HttpKernel\Event\KernelEvent

getRequestType()

HttpKernelInterface::MASTER_REQUEST ya da ttpKernelInterface::SUB_REQUEST) olarak yani 1 veya 2 olarak cevap veriyor. Bunlar HTTPKernelInterface icinde sabit (const) olarak belirtilmis.

getKernel()

Requesti isleyen cekirdegi return ediyor.

getRequest()

Uzerinde calisilan Request nesnesini donderiyor.

isMasterRequest()

Master turunce bir request uzerinde calisilip calisilmadigini donderiyor.

kernel.request

Event Class: Symfony\Component\HttpKernel\Event\RequestEvent

Request herhangi bir isleme tabi tutulmadan once request uzerinde degisiklik yapmak icin en erken gonderilen eventtir. Controller islemlerinden once tetiklenir. Requestin controller seviyesine ulasmadan once sartlara gore bir cevap almasi gerekiyorsa bu olay isleyici ile yapilabilir.

kernel.controller

Event Class: Symfony\Component\HttpKernel\Event\ControllerEvent

Hangi controllerin requesti isleyecegi belli olduktan sonra ama controller calismadan once kullanilir. Param converters gibi coontrollerin ihtiyac duydugu verileri degistirmek veya controlleri farkli bir controller ile degistirmek icin kullanilabilir.

kernel.controller_arguments

Event Class: Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent

Controller cagrisindan hemen once gonderilir. Controller argumanlarinda degisiklik yapmak icin yararlanilabilir. Typically, this is used to map URL routing parameters to their corresponding named arguments; or pass the current request when the Request type-hint is found: ( bu cumleyi ceviremedim, duzgun ceviren yoruma yazsin )

kernel.view

Event Class: Symfony\Component\HttpKernel\Event\ViewEvent

Controller bir HTTPFoundation turu bir response gondermedigi zaman gonderilir. Response turu uygun olmayan bir deger donderildigi zaman bunu Symfony’ye uygun bir HTTPFoundation/Response turune cevirmek icin kullanilabilir.

kernel.response

Event Class: Symfony\Component\HttpKernel\Event\ResponseEvent

kernel.view ile bir reponse set edilmis olsa da HTTP Header bilgileri gibi degisiklikler yapmak icin kullanilabilir.

kernel.finish_request

Event Class: Symfony\Component\HttpKernel\Event\FinishRequestEvent

kernel.response sonrasinda gonderilir. Uygulamanin genel durumunun sifirlanmasinda yararlidir. Mesela translator listener local olarak bir takim ayarlara sahipse bu ayarlari global ayarlara cevirebilir.

kernel.terminate

Event Class: Symfony\Component\HttpKernel\Event\TerminateEvent

Reponse sonrasinda eposta gondermek gibi bekleyebilecek veya zaman alacak islemlerin yapilmasi amaci ile kullanilir.

kernel.exception

Event Class: Symfony\Component\HttpKernel\Event\ExceptionEvent

Request sirasinda bir excetion olustugu zaman gonderilir. Hatadan kurtulmak veya exception durumunu degistirmek icin kullanilabilir:

Symfony bir response icin HTTP status code olustururken soyle davranir:

  • Eger isClientError(), isServerError() ya da isRedirect() true ise, Response object kullanilir;
  • Eger orijinal hata Symfony\Component\HttpKernel\Exception\HttpExceptionInterface,uzerinden geliyorsa getStatusCode() cagrilir ve getHeaders() eklenir
  • Her ikiside true degilse 500 donderilir

Istisna yanitinin HTTP status kodunu anlamli bir nedenden dolayi degistirmeniz gerekirse;

$event->allowCustomResponseCode();$response = new Response('No Content', 204);$event->setResponse($response);

--

--