【问题标题】:How to validate params in REST Lumen/Laravel request?如何验证 REST Lumen/Laravel 请求中的参数?
【发布时间】: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 validation url get lumen


【解决方案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 验证不需要太多努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 2015-10-05
相关资源
最近更新 更多