web-dev-qa-db-ja.com

CORS APIとsymfony

SymfonyでクロスドメインAPIを作成する必要があります。そのためのバンドルはありますか?

FOS Rest Bundleを試しましたが、問題は解決しなかったようです。

6
Daniele Dolci

NelmioCorsBundleを使用することをお勧めします:

https://github.com/nelmio/NelmioCorsBundle

このバンドルを使用すると、ACLスタイルのURLごとの構成でCross-Origin Resource Sharingヘッダーを送信できます。

CORSの問題に非常に役立ちます

それが正しい方法かどうかはわかりませんが、私は解決しました:

1)新しいイベントサブスクライバーを作成します(ResponseSubscriberなど)2)リスニングKernelEvents::RESPONSE event 3)ハンドラーに以下を追加します。

if ($event->getRequest()->getMethod() === 'OPTIONS') {
    $event->setResponse(
            new Response('', 204, [
                'Access-Control-Allow-Origin' => '*',
                'Access-Control-Allow-Credentials' => 'true',
                'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS',
                'Access-Control-Allow-Headers' => 'DNT, X-User-Token, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type',
                'Access-Control-Max-Age' => 1728000,
                'Content-Type' => 'text/plain charset=UTF-8',
                'Content-Length' => 0
            ])
        );
    return ;
}
2
WiRight

Symfony 5ファイル内のこのコードpublic/index.php完璧に動作します。

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Allow: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
    die();
}

また、パッケージcorsを削除します。このバンドルは機能しません

0
juanitourquiza