はじめに
こんにちは。楽天モバイルの楽天回線エリアに住んでますが、パートナー回線しか繋がらない筆者です。
さて、Laravel使ってまして、query parametersで空文字来てるはずなのに、nullになっちゃうことに地味に小一時間悩んだので共有します。
結論:こいつの仕業
Kernel.php
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, // これ
];
こいつが空文字をnullに変換しているんです...
地味に小一時間悩んだ話
以下を例にすると、2のときにnullになっているという恐ろしさ...。
そして、3のときも空文字が入っていたもののそれがnullに変換されてsetされているので、デフォルト値の1が適用されないという恐ろしさ...。
HomeController.php
public function index(Request $request)
{
// 1: http://localhost?hoge=1
$hoge = $request->input('hoge');
dd($hoge); // 1
// 2: http://localhost?hoge=
$hoge = $request->input('hoge');
dd($hoge); // null
// 3: http://localhost?hoge=
$hoge = $request->input('hoge', 1);
dd($hoge); // null
}
勝手に変えてほしくない人は
以下コメントアウトしましょう
あと、ちゃんとコメント書いておきましょう
https://github.com/laravel/laravel/blob/8.x/app/Http/Kernel.php#L23
おわりに
便利なのかもしれないのですが、良し悪しあると思います
何かのお役に立てていれば幸いです。
それでは。