ThinkPHP フレームワークを使用して開発する場合、リクエスト タイプ エラーの問題がよく発生します。たとえば、POST メソッドを使用してフォームを送信すると、「リクエスト タイプ エラー」というプロンプトが表示されます。では、なぜこの問題が発生するのでしょうか?どうやって解決すればいいでしょうか?
まず、リクエスト タイプの概念を理解しましょう。 HTTP プロトコルには、GET と POST の 2 つのリクエスト メソッドがあり、GET リクエストは URL の後ろにデータを連結してサーバーに送信しますが、POST リクエストはリクエスト データを HTTP リクエストのメッセージ本文に入れて送信します。サーバーに。同時に、PUT や DELETE などのメソッドもあります。 ThinkPHP フレームワークでは、$_SERVER['REQUEST_METHOD'] を通じてリクエスト メソッドを取得できます。
POST メソッドを使用してリクエストしたときに「リクエスト タイプ エラー」プロンプトが表示された場合は、POST メソッドを使用してリクエストしたときにサーバーが POST パラメータを取得できないことが考えられます。
1. csrf_token がフォームに追加されていない
ThinkPHP では、フォーム偽造攻撃を防ぐために、フォームに csrf_token を追加して、ソースを検証する必要があります。形式、合法性。フォームに追加されていない場合は「リクエストタイプエラー」が表示されます。解決策は、次のように csrf_token タグをフォームに追加することです:
<form method="post"> <!-- 在这里加入csrf_token标志 --> <?php echo token();?> <input type="text" name="username" /> <input type="password" name="password" /> <button type="submit">提交</button> </form>
2. CSRF 防御を無効にしない
グローバル CSR 防御を有効にしても、csrf は無効になりません。コントローラーの防御が失敗すると、「Request Type Wrong」プロンプトが表示されます。解決策は、コントローラーで csrf 防御をオフにすることです。コードは次のとおりです:
class IndexController extends Controller { //关闭csrf防御 protected $middleware = [ \think\middleware\AllowCrossDomain::class, \think\middleware\CheckRequestCache::class, \think\middleware\SendFile::class, \think\middleware\ValidateRequest::class => [ //关闭csrf防御 'except' => ['login'] ], ]; //login方法 public functtion login() { //... } }
上記の 2 つの状況に加えて、AJAX リクエストを行うときにリクエスト構築エラーが発生する可能性もあります。具体的には、$.post() メソッドまたは $.ajax() メソッドを使用してリクエストを行う場合、dataType、contentType、その他のパラメーターが正しく記述されず、その結果、リクエスト タイプが正しくなくなります。
要約すると、ThinkPHP の使用中にリクエスト タイプのエラー メッセージが発生した場合は、まず上記の 3 つの状況が発生しているかどうかを確認し、それに応じて解決する必要があります。
以上がthinkphpリクエストタイプエラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。