it-swarm.dev

特定のコントローラにのみheader( "Access-Control-Allow-Origin:*")を設定しますか? (クロスオリジンのリソース共有)

私のカスタムコンポーネントには、外部サイト、デスクトップおよびモバイルアプリケーションからのリクエストを受信するコントローラーがあり、返されるデータはJSON形式です。

Webアプリケーションから(AngularJSを使用して)リクエストを行うとCORS(Cross-Originリソース共有)の問題が発生するため、Access-Control-Allow-Originヘッダーを設定してCORSを有効にします。

ただし、header( "Access-Control-Allow-Origin:*")を設定すると、Joomlaのルートフォルダーのindex.phpに配置された場合にのみ問題が解決されます。コントローラー(mycontroller.json.php)内にある場合は有効になりません。 Access-Control-Allow-Originを有効にしたいのはコントローラーだけで、ウェブサイト全体では有効になりません。

エンドユーザーにindex.phpの編集または.htaccessファイルの編集を依頼することは、まったく良い解決策ではありません。テクニカルユーザーではないため、Joomlaを更新すると、カスタマイズが失われます。

このCORSの問題を解決するアイデアがある場合、またはこの種のタスクを処理する方法がある場合は、お知らせください。本当に感謝しております。ありがとう!

3
Hung Tran

これはおそらく、コーヒーPHP header()の呼び出しが、Joomlaがフレームワークですでに設定しているものと競合しているためです。コアのJoomlaメソッドを使用して設定してみてください。

jimport('joomla.environment.response');
JResponse::setHeader('Access-Control-Allow-Origin:', '*');

また、コアAJAX機能が同じドメインでリクエストをテストして機能していることを確認しましたか?

3
Brian Bolli