Symfony2-comment configurer les en-têtes custom CORS?
je veux définir les en-têtes suivants pour le modèle de brindille à partir de mon 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, *');
Toutes les suggestions de comment faire cela?
27
demandé sur
Community
2011-12-12 13:37:31
4 réponses
en utilisant la classe de réponse:
use Symfony\Component\HttpFoundation\Response;
$response = new Response();
$response->headers->set('Content-Type', 'text/html');
$response->send();
30
répondu
Steven
2011-12-12 10:52:04
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 }
30
répondu
pleerock
2016-11-26 00:58:30
si son contrôleur intérieur utilise alors ceci:
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;
}
}
il suffit de remplacer Content-Type par votre en-tête et xml par de la valeur ... etc
3
répondu
TroodoN-Mike
2013-12-13 20:12:18
Si vous utilisez le render()
méthode du contrôleur, alors vous pouvez ajouter les en-têtes nécessaires comme ci-dessous parce que render()
la méthode retourne un objet de réponse:
$response = $this->render('AppBundle:Post:index.html.twig', array('someArgs' => $someArgs));
$response->headers->set('Content-Type', 'text/html');
return $response;
2
répondu
mufmuf
2017-04-24 11:38:56