Symfony3 и NelmioCors - на POST это не работает

Я использую NelmioCorsBundle под Symfony3 со следующей настройкой:

nelmio_cors:
        defaults:
            allow_credentials: false
            allow_origin: []
            allow_headers: []
            allow_methods: []
            expose_headers: []
            max_age: 0
            #hosts: []
            origin_regex: false
        paths:
            '^/api/':
                origin_regex: true
                allow_origin: ['*']
                allow_headers: ['X-Custom-Auth','Content-Type','X-Requested-With','Accept','Origin','Access-Control-Request-Method','Access-Control-Request-Headers','Authorization']
                allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
                expose_headers: []
                max_age: 3600
            '^/':
                origin_regex: true
                allow_origin: ['*']
                allow_headers: ['X-Custom-Auth']
                allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
                max_age: 3600
                hosts: ['^api\.']

который работает нормально на GETно когда я пытаюсь использовать с POSTя получил

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

Что не так с этой настройкой?

1 ответ

Я не уверен, но на вашем пути есть ^/api/, и в вашем сообщении об ошибке есть только http://localhost:8080, Попробуй смени роутинг твой POST контроллер для /api/something, Дайте мне знать, если это работает.


Обновить:

Я не знаю Nelmio Cors достаточно, но если вы не планируете использовать управление сложными заголовками, я предлагаю подход, который работает в моем случае (без внешнего пакета):

Добавить слушателя: src/AppBundle/Listentes/CorsListener.php

<?php
namespace AppBundle\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');
    }
}

И зарегистрируй это в сервисах: app/config/services.yml

services:
    app.cors_listener:
        class:      AppBundle\Listener\CorsListener
        tags:
           - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }

Я знаю, что это не точный ответ на ваш вопрос, но надеюсь, что это поможет.

Другие вопросы по тегам