LoginSignup
1
0

【Laravel】formのaction属性に設定したURLがhttp始まりでPOSTメソッドの処理がうまくいかなかったときにやったこと

Last updated at Posted at 2023-08-23

環境

  • PHP 8.0.28
  • Laravel 9.52.15

事象について

POSTメソッドで実行されるフォームを動かしたところ
なぜかGETメソッドで実行されてしまう事象が発生。

実行結果

submitボタンを押したら見慣れない画面が出てきた…
image.png

このまま送信をしたら、なんかGETで呼び出されてる…
image.png

原因

フォームのaction属性に定義されてるURLがhttps始まりではなくhttp始まりになって
混合フォームとなってたことで想定外の処理結果となってた模様。
このまま送信を押した後に、開発ツールでリクエストの内容を確認したらGETで送られてたので
確認画面のボタンを押したときにGETに置き換えられてしまったみたい。

Viewに書いたコード

<form action="{{ url('send') }}" method="POST" class="form-horizontal">

HTML出力結果

<form action="http://*******/send" method="POST" class="form-horizontal"></form>

混合フォームって?

WEBページへのアクセスにはHTTPSが使われてるけど
そのページ内にあるフォームの送信先などがHTTPで定義されてる場合のことを指す。

解決策

こちらの記事を参考にapp/Providers/AppServiceProvider.php内のboot関数内にURL::forceSchemeを追記したところ解決した。(URLがHTTPS始まりになりPOSTメソッドでリクエストされるようになった)
Laravelのrouteがhttpになる【HTTPS化】

app/Providers/AppServiceProvider.ph
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\URL;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot() {
        if (App::environment('production','staging','local')) {
            URL::forceScheme('https');
        }
    }
}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0