如何验证 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/Laravel

如何在 LUMEN 中使用 GATE 立面(Laravel 6.2)

如何在原始 sql WHERE IN [LUMEN/LARAVEL] 中绑定命名参数

如何解决 Lumen/Laravel 中的单例?

如何在 Laravel Lumen 8 中设置响应的 cookie

如何在 Cpanel 的子域 lumen/laravel 上安装免费 SSL?