在没有立面的流明中验证路由参数
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);
【讨论】:
以上是关于在没有立面的流明中验证路由参数的主要内容,如果未能解决你的问题,请参考以下文章