php - headers - Symfony2: ¿cómo puedo configurar encabezados de CORS personalizados?
symfony request get parameters (4)
Si está dentro del controlador, usa esto:
use Symfony/Bundle/FrameworkBundle/Controller/Controller;
use Symfony/Component/HttpFoundation/Response;
class DefaultController extends Controller
{
public function indexAction()
{
...
$response = new Response($xmlContent);
$response->headers->set(''Content-Type'', ''xml'');
$response->headers->set(''Another-Header'', ''header-value'');
return $response;
}
}
Simplemente reemplace Content-Type con su clave de encabezado y xml con valor ... etc.
Quiero establecer los siguientes encabezados para la plantilla TWIG desde mi DefaultController:
header(''Access-Control-Allow-Methods: GET, POST, OPTIONS'');
header(''Access-Control-Allow-Credentials: true'');
header(''Access-Control-Allow-Origin: http://www.mywebsite.com'');
header(''Access-Control-Allow-Headers: Content-Type, *'');
¿Alguna sugerencia de cómo hacer eso?
Si está utilizando el método render()
del controlador, puede agregar los encabezados necesarios como a continuación porque el método render()
devuelve un objeto Response:
$response = $this->render(''AppBundle:Post:index.html.twig'', array(''someArgs'' => $someArgs));
$response->headers->set(''Content-Type'', ''text/html'');
return $response;
Usando la clase de respuesta:
use Symfony/Component/HttpFoundation/Response;
$response = new Response();
$response->headers->set(''Content-Type'', ''text/html'');
$response->send();
de this artículo:
CorsListener.php
<?php
namespace MyCorp/MyBundle/Listener;
use Symfony/Component/HttpKernel/Event/FilterResponseEvent;
class CorsListener
{
public function onKernelResponse(FilterResponseEvent $event)
{
$responseHeaders = $event->getResponse()->headers;
$responseHeaders->set(''Access-Control-Allow-Headers'', ''origin, content-type, accept'');
$responseHeaders->set(''Access-Control-Allow-Origin'', ''*'');
$responseHeaders->set(''Access-Control-Allow-Methods'', ''POST, GET, PUT, DELETE, PATCH, OPTIONS'');
}
}
services.yml
app.cors_listener:
class: MyCorp/MyBundle/Listener/CorsListener
tags:
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }