Laravel form送信した内容を取得すると空白がnullになっている(TrimStrings、ConvertEmptyStringsToNull)

Laravel側でリクエストを見ているとnullが格納された項目がいた…

作成日:2024-02-29, 更新日:2024-02-29

経緯

Laravel側でform送信されたデータを受取ってバリデーションチェックをしていたら「空白」の項目が「null」に書き換わっている

「空白」の項目が「null」に書き換わる可能性

  • form送信時にnullをセットしている
  • Laravel側で受取ってバリデーションチェックするまでの間に「空白」を「null」にする制御を追加している
  • Laravelの機能で「空白」を「null」にする仕組みがある

調査: form送信時にnullをセットしている

基本…そんなヘンなコトはしないんだが…念のために確認

  1. form送信時にhtmlだけなのかjavascriptを使っているのか確認
  2. javascriptを使っているなら送信するまでの間に「null」をセットしているか確認

調査: Laravel側で受取ってバリデーションチェックするまでの間に「空白」を「null」にする制御を追加している

そんなコトはしていない…が一応確認
→コントローラー内のソースを確認

調査: Laravelの機能で「空白」を「null」にする仕組みがある

コントローラーに来る前に「null」にしているか確認
→リクエストをマルっと出力

リクエストを確認

var_dump($request->all())

→ひとまず調べたら…確かに「null」が格納されていた

ミドルウェア

ミドルウェアが何かしている…可能性を検討
調べると下記の2つが関係あるそうだ

  • TrimStrings - 指定外の項目は「trim()」する。trim()してもnullになることは無いんだが…「関係がまったくない」とも言い切れないそうだ
  • ConvertEmptyStringsToNull - 「空」を「null」に置き換える。詳細不明(未調査)

「app/Http/Kernel.php」に「TrimStrings」「ConvertEmptyStringsToNull」がいるか確認する
→ いた。いたので対応を検討する

対応

  • ミドルウェアを止める
  • nullが格納された項目に対して処理を追記

ミドルウェアのほうを止める場合、他の影響を考慮する必要があるので気軽にやると面倒なコトになるっぽい

今回はある程度、作業を進めているのでミドルウェアを止めるのは不安がある
→nullの項目を空白に置き換える仕組みを自作する