如何验证 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;
}