如何在laravel上区分请求空字符串和null

Ell*_*Yap 3 laravel-5

在PHP我们可以做到

isset($_POST['name'])
Run Code Online (Sandbox Code Playgroud)

这样用户提交的空文本就可以被检测到.

但在laravel

$request->has('name')
Run Code Online (Sandbox Code Playgroud)

在空字符串上也返回null.

我需要找到一种方法来判断它是一个空字符串还是根本没有发布的字段

Joe*_*Joe 19

如果您使用的是laravel 5.4或更高版本,则默认情况下它使用中间件将所有空字符串转换为null.

在App\Http\Kernel.php中: \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class

注释掉这个中间件以防止这种行为.


MoP*_*oPo 7

您可以在请求实例中使用exists()方法.如果您想检查请求检查中是否有值:

$request->has('key');
Run Code Online (Sandbox Code Playgroud)

如果要检查密钥是否存在,请使用:

$request->exists('key');
Run Code Online (Sandbox Code Playgroud)

  • 如果我错了,请纠正我。在 Laravel 5.4 及更高版本中,所有空字符串都转换为 null。并且使用 $request->has('key') 将返回一个 null 值。所以我认为你不能使用 $request->has('key') 来检查是否有一个键的值。 (2认同)
  • 只要参数已提交,无论值如何,`$request->has('key')` 返回 true,如果为 null 或空字符串 `""`,则返回 false如果用户提交 `""`,`$request->input('key', '')` 返回 null,但如果请求中缺少该键,则应用默认值(第二个参数) (2认同)