Laravel
request

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

More than 1 year has passed since last update.


結論

自動で空文字が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