LoginSignup
25
20

More than 5 years have passed since last update.

Laravelのリクエストに未入力のフィールドが入った場合、空文字になるかnullになるか

Last updated at Posted at 2017-11-11

結論

自動で空文字がnullに変換される

Laravelのミドルウェア[TrimStrings]と[ConvertEmptyStringsToNull]により、空の文字列フィールドは自動でnullに変換される。この処理を無効にするには、App\Http\Kernelクラスの$middlewareプロパティから該当のミドルウェアを削除する

https://readouble.com/laravel/5.4/ja/requests.html
(入力のトリムとノーマライゼーション)

入力値が空かどうかの判別

ユーザーがフォームからリクエストを送信する場合、任意項目は空のまま送信されることがあります。
例えば任意項目(例:質問)の入力有無で処理を分けたい場合に、以下のどちらで判別するか迷っていました。

//空文字が送られてくる場合
if($question !== ''){・・・}

//nullが送られてくる場合
if(isset($question)){・・・}

nullに自動変換するなら2番目か、と思っていましたが、
そもそもempty()を使えばどちらで良かった。。

//空文字だろうがnullだろうがこれでOK
if(!empty($question){・・・}

コントローラー等でチェックする場合はこれでチェック可能。
入力値が存在するor空文字で無い場合はtrueを返す。
(ドメインモデルでチェックする場合はRequestクラスに依存するため使わない方が良さそう)

if ($request->has('question')) {・・・}

[追記]コメントで指摘頂きました。
Laravel5.5ではhasメソッドは空文字の場合もtrueを返す仕様に変わったようです。
5.5ではfilledメソッドを使うと5.4のhasメソッドと同じことが実現できるようです。

if ($request->filled('name')) {・・・}

(参考)
https://readouble.com/laravel/5.4/ja/requests.html

25
20
2

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
25
20