在没有立面的流明中验证路由参数

Posted

技术标签:

【中文标题】在没有立面的流明中验证路由参数【英文标题】:Validation of route parameters in lumen without facades 【发布时间】:2016-02-19 16:44:21 【问题描述】:

希望你们能帮助我,搜索了很长时间但找不到我的答案。

我正在 Lumen 中构建一个 API,我有一个指向控制器的 GET 路由,定义为:

public function mymethod(Request $request, $param1, $param2, $param3)

对于 POST/PUT 路由,我使用包含的验证器:

$validator = app('validator')->make($request->all(), $rules, $messages, $customAttributes );

在上面概述的 GET 路由中, dd( $request->all() ) 返回一个空数组(正如我猜测的那样),有没有办法获取已传递给的所有路由参数的数组方法,这样我就可以在不编写丑陋和具体的验证规则的情况下验证它们?

我可以像这样手动完成:

$parameters = [ 'param1' => $param1, 'param2' => $param2, ... ]

但我想知道是否有 Laravel 方法,看起来 Input::all() 方法可以满足我的需要,但我更愿意避免使用外观。

感谢您的帮助!

【问题讨论】:

启用外观并测试 Input::all()。它不返回传递给控制器​​的路由参数。 【参考方案1】:

Input 外观只是$request 变量的外观,所以Input::all()$request->all() 基本上是相同的。

但要记住的是,您正在寻找路由参数,而不是查询字符串参数。请求只知道查询字符串参数,所以你真的需要深入到路由对象来获取路由参数。

查看 Lumen 代码后,我相信您会想要这样的东西。代码可以链接在一起,我只是将它分成单独的行以便能够注释每个步骤。

// get the Illuminate\Http\Request object for the current request
$request = app('request');

// get the route information associated with the current request
$route = $request->route();

// route parameters are the 3rd item in the route info array
$params = $route[2];

// chained code (just for completeness)
$params = app('request')->route()[2];

// validate
$validator = app('validator')->make($params, $rules, $messages, $customAttributes);

【讨论】:

以上是关于在没有立面的流明中验证路由参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在流明中验证日期范围

流明自定义验证响应

在流明中找不到类“验证器”

流明自定义验证

流明仅在验证后才抛出 CORS

单元测试:如何在流明中模拟具有路由参数的请求