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

Validation of route parameters in lumen without facades

希望大家能帮帮我,找了好久都找不到我的答案。

我正在 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() ) returns 一个空数组(正如我猜的那样),有什么方法可以获取所有路由参数的数组已传递给方法以便我可以验证它们而无需编写丑陋且具体的验证规则?

我可以像这样手动完成:

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

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

感谢您的帮助!

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);