環境
- PHP 8.0.28
- Laravel 9.52.15
事象について
POSTメソッドで実行されるフォームを動かしたところ
なぜかGETメソッドで実行されてしまう事象が発生。
実行結果
原因
フォームの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');
}
}
}