Symfony : Kernel Events
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 daisRedirect()
true ise, Response object kullanilir; - Eger orijinal hata
Symfony\Component\HttpKernel\Exception\HttpExceptionInterface
,uzerinden geliyorsagetStatusCode()
cagrilir vegetHeaders()
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);