ThinkPHP5 は、PHP をベースにしたオープンソースの Web アプリケーション フレームワークで、その設計コンセプトはシンプル、直感的、柔軟です。ただし、ThinkPHP5 フレームワークを使用して開発する場合、いくつかの問題やエラーが発生する可能性があります。その中でもフォーム送信時のエラーはよくあるトラブルの一つです。この記事では、ThinkPHP5の送信フォームでエラーが発生する原因と解決策を紹介します。
1. エラーの原因
ThinkPHP5 では、post メソッドを使用してフォーム データを送信することも、put や delete などの他のメソッドを使用することもできます。ただし、フォーム データを送信するときに、次の図に示すように、「この HTTP メソッドは送信できません」というエラー メッセージが表示されることがあります。
このエラー メッセージが表示される理由は、ブラウザが「OPTIONS」と呼ばれる事前チェック メカニズムを使用しているためです。 POST や PUT などの単純でないリクエスト メソッドを使用してデータを送信する場合、ブラウザはまず OPTIONS リクエストを送信して、サーバーがこのリクエスト メソッドをサポートしているかどうかを判断します。サーバーがサポートしていない場合、上記のエラーメッセージが表示されます。
2. 解決策
まず、クロスドメインとは何かを理解します。クロスドメインとは、あるドメイン名の JavaScript コードを別のドメイン名の Web ページ上で実行することを指します。厳密に言えば、プロトコル、ドメイン名、ポートが異なる限り、それらはすべて別のドメインとみなされ、クロスドメインの問題が発生します。フォーム データを送信するときに、クロスドメインの問題が原因で上記のエラーが発生する場合があります。
解決策は、サーバー側でクロスドメインのサポートを有効にすることです。 ThinkPHP5 では、構成ファイル config.php に次のコードを追加できます。
// 开启跨域支持 'cross_domain' => [ 'allow_origin' => ['*'], 'allow_methods' => ['POST','GET','OPTIONS','PUT','DELETE'], 'allow_headers' => ['*'], 'expose_headers'=> ['token'], 'max_age' => 3600, 'allow_credentials' => true, ],
このうち、allow_origin パラメーターは許可されるドメイン名を指定します。 はすべてのドメイン名が許可されることを意味します。 allow_methods パラメータは、許可されるリクエスト メソッドを指定します。PUT や DELETE などの単純でないリクエスト メソッドも追加する必要があります。 allow_headers パラメーターは、許可されるリクエスト ヘッダー情報を指定します。 は、任意のリクエスト ヘッダーを受け入れることを意味します。 Expose_headers パラメーターはユーザーが取得できる追加情報を指定し、token はトークン情報の取得が許可されることを示します。 max_age パラメータは、キャッシュに許可される時間を秒単位で指定します。 allow_credentials パラメーターは、Cookie などの ID 資格情報の使用が許可されることを示します。
クロスドメイン サポートを有効にしたくない場合は、リクエスト メソッドを変更することで問題を解決することもできます。フォーム データを送信するときに、ブラウザーの事前チェックの問題を回避するために、リクエスト メソッドを POST に変更できます。
HTML では、次のようにフォームのメソッド属性を変更できます:
<form method="POST">
JavaScript では、次のように ajax リクエストの type 属性を変更できます:
$.ajax({ type: 'POST', url: 'http://example.com/path/to/api', data: postData, success: function(data) { console.log(data); } });
Nginx を Web サーバーとして使用しているときに上記のエラーが発生した場合は、次の構成を nginx.conf ファイルに追加できます:
location / { if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'POST,GET,OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,token'; add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; } ... }
Among Access-Control-Allow-Origin 、 Access-Control-Allow-Methods、 Access-Control-Allow-Headers、 Access-Control-Max-Age およびその他のパラメーターは、上で説明したものと同じ意味を持ちます。
概要
フォーム データ送信時のエラーはよくある問題ですが、初心者にとっては解決するのが難しい場合があります。この記事では、読者が ThinkPHP5 フレームワークをより良く使用できるように、フォーム送信時のエラーの理由と解決策を紹介します。
以上がthinkPHP5 送信フォームのエラー報告の理由と解決策の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。