如何验证 REST Lumen/Laravel 请求中的参数?
How to validate params in REST Lumen/Laravel request?
路线:
$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
的更多信息:
Form requests are not supported by Lumen. If you would like to use form requests, you should use the full Laravel framework.
换句话说,您不能在 Lumen 的构造函数中通过注入使用自定义 requests
。
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;
}
路线:
$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
的更多信息:
Form requests are not supported by Lumen. If you would like to use form requests, you should use the full Laravel framework.
换句话说,您不能在 Lumen 的构造函数中通过注入使用自定义 requests
。
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;
}