Laravel 请求:判断是否存在输入值 1 个改进

问题

如何在控制器中判断某个输入值是否存在?比如 http://domain.com/foo/bar?name=tom,如何判断是否存在 name

回答

可通过调用 Illuminate\Http\Request 实例的 has 方法判断请求中是否存在某个输入值(参数)。如果存在, has 方法返回 true,否则返回 false

if ($request->has('name')) {
    //
}

has 方法也可接受一个数组,将判断数组中指定的参数在请求中是否全部存在:

if ($request->has(['name', 'email'])) {
    //
}

如果想要判断一个参数在请求中是否存在,并且不为空,需要使用 filled 方法:

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

考虑下面的例子:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    public function index(Request $request)
    {
        return [
            'name' => $request->has('name'), 
            'name and email' => $request->has(['name', 'email']),
            'name filled' => $request->filled('name')
        ];
    }
}

看看发起不同的请求URL,输出结果有什么不同。

/test

{
  "name": false,
  "name and email": false,
  "name filled": false
}

/test?name=

{
  "name": true,
  "name and email": false,
  "name filled": false
}

/test/name=tom&email=

{
  "name": true,
  "name and email": true,
  "name filled": true
}

参考

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!