Laravel 请求:判断是否存在输入值
问题
如何在控制器中判断某个输入值是否存在?比如 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
}