Я хочу установить следующие заголовки для шаблона TWIG из моего 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, *');
Любые предложения, как это сделать?
Использование класса ответа:
use Symfony\Component\HttpFoundation\Response; $response = new Response(); $response->headers->set('Content-Type', 'text/html'); $response->send();
Источник / Документация
из этой статьи:
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 }
Если его внутренний контроллер использует это:
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; } }
Просто замените Content-Type своим ключом заголовка и xml значением … и т. Д.
Если вы используете метод render()
контроллера, то вы можете добавить необходимые заголовки, как показано ниже, потому что метод render()
возвращает объект Response:
$response = $this->render('AppBundle:Post:index.html.twig', array('someArgs' => $someArgs)); $response->headers->set('Content-Type', 'text/html'); return $response;