Laravel中路由参数无法被request->filled()检测的原因咨询
问题原因解析
这是因为Laravel里路由参数和请求输入数据是完全独立的两个存储体系:
- 你通过
/list/{list_id}/edit定义的list_id属于路由参数,它被存在路由匹配的结果容器里,并不在请求的输入集合(包含GET查询参数、POST表单数据、JSON请求体等)中。 $request->list_id能拿到值,是因为Laravel的Request类有__get魔术方法,它会先从路由参数里查找对应字段,找不到再去输入数据里找。- 而
$request->filled('list_id')的作用是检查请求输入集合里是否存在该字段,且值不为空字符串、null或空白字符。路由参数不在这个集合里,所以返回false。 - 当用
?list_id=20传递参数时,这个参数属于GET查询参数,会被纳入请求输入集合,所以filled()能检测到,返回true。
如果要验证路由参数是否存在且有效,直接用$request->route('list_id')判断是否非空,或者用Route::current()->hasParameter('list_id')来检查。
内容的提问来源于stack exchange,提问作者Oto Shavadze
相关产品推荐
相关产品推荐

