Cómo agregar encabezados personalizados a cada respuesta (globalmente) en Symfony 5

Cómo agregar encabezados personalizados a cada respuesta (globalmente) en Symfony 5

Normalmente, si necesitas agregar un encabezado global a su sitio web, puede hacerlo a través de su servidor web (apache o nginx). Sin embargo, también es posible agregarlos global o condicionalmente a su respuesta en Symfony y no solo dentro de sus controladores.

En este artículo, te explicaré cómo agregar fácilmente encabezados personalizados a cada respuesta en Symfony 5.

1. Cree el RequestListener

Para lograr esto, simplemente puede registrar un detector de eventos relacionado con el kernel, específicamente con el evento kernel.responseEste evento se distribuye después de que el controlador o cualquier kernel.view escucha devuelve un objeto Response. Es útil modificar o reemplazar la respuesta antes de devolverla (por ejemplo, agregar / modificar encabezados HTTP, agregar cookies, etc.). Crea el archivo RequestListener.php dentro del directorio src/EventListener con el siguiente contenido:

<?php

// src/EventListener/RequestListener.php
namespace App\EventListener;

use Symfony\Component\HttpKernel\Event\ResponseEvent;

class RequestListener
{
    public function onKernelResponse(ResponseEvent $event)
    {
        if (!$event->isMasterRequest()) {
            // no hagas nada si no es la solicitud maestra
            return;
        }
        
        $response = $event->getResponse();
        
        // Establecer varios encabezados simultáneamente
        $response->headers->add([
            'Header-Name1' => 'value',
            'Header-Name2' => 'ExampleValue'
        ]);
        
        // O establecer un solo encabezado
        $response->headers->set("Example-Header", "ExampleValue");
    }
}

2. Registrar EventListener

Como paso final, solo necesitas registrar el oyente de solicitudes en tu archivo services.yaml de esta manera:

# app/config/services.yaml

services:
    # Register EventListener onKernelResponse
    App\EventListener\RequestListener:
        tags:
            - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }

Borra la caché de tu proyecto y verifique los encabezados de tu sitio web, deberías ver ahora los encabezados personalizados que agregaste:

Custom Headers Website Request

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable