如何验证 REST Lumen/Laravel 请求中的参数?
Posted
技术标签:
【中文标题】如何验证 REST Lumen/Laravel 请求中的参数?【英文标题】:How to validate params in REST Lumen/Laravel request? 【发布时间】:2017-10-21 21:47:35 【问题描述】:路线:
$app->get('/ip/ip', GeoIpController::class . '@show');
如何正确验证 ip?我试图在show
方法中注入Request
对象,但无法解决这个问题。我想坚持使用REST
,所以使用URL
参数对我来说不是解决方案。我将它用于API
目的,因此作为响应的状态代码是合适的。
也试过这样:
$app->bind('ip', function ($ip)
$this->validate($ip, [
'ip' => 'required|ip',
]);
);
编辑:
下面的答案是正确的,我在文档中找到了有关requests
的更多信息:
Lumen 不支持表单请求。如果你想使用表单请求,你应该使用完整的 Laravel 框架。
换句话说,您不能在 Lumen 的构造函数中通过注入使用自定义 requests
。
【问题讨论】:
laravel.com/docs/5.4/validation#rule-ip 有什么问题? 【参考方案1】:validate
方法将请求对象作为第一个参数。由于您在路由中传递 ip,因此您需要创建一个自定义验证器。
public function show($ip)
$data = ['ip' => $ip];
$validator = \Validator::make($data, [
'ip' => 'required|ip'
]);
if ($validator->fails())
return $validator->errors();
return response()->json(['All good!']);
编辑:这是 laravel 在引擎盖下所做的一切。基本上你可以直接使用这个函数来验证 ip 并节省大量的精力。
protected function validateIp($ip)
return filter_var($ip, FILTER_VALIDATE_IP) !== false;
【讨论】:
这就是我要找的。还有一个问题是:在我在这个项目中使用的Lumen
中,没有可用的类\Validator
,而Illuminate\Validation\Validator
没有提供make
方法。属性$app->withFacades();
已启用。
我用过Illuminate\Support\Facades\Validator;
,它就像金子一样工作。谢谢。
@wujt 很好,我添加了验证功能以备不时之需。基本的 ip 验证不需要太多努力。以上是关于如何验证 REST Lumen/Laravel 请求中的参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 LUMEN 中使用 GATE 立面(Laravel 6.2)
如何在原始 sql WHERE IN [LUMEN/LARAVEL] 中绑定命名参数