Lumen 中 Request 要这样拿到 route 中的 parameter

Laravel 中获取 route 中的 parameter 的方法:

//假设 route 是这样的:
$router->resource('posts.comments', PostCommentController::class);

//获取的方法:
$postId = $request->posts;
$commentId = $request->comments;

Lumen 中的 routeResolver 有点不太一样,不能这样:

$postId = $request->posts;

也不能这样:

$postId = $request->route('posts');

报错:Call to a member function parameter() on array

所以正确的做法是自己解析:$request->route(),略坑。
有人写了一个 helper 的方法:

if (!function_exists('route_parameter')) {
    /**
     * Get a given parameter from the route.
     *
     * @param $name
     * @param null $default
     * @return mixed
     */
    function route_parameter($name, $default = null)
    {
        $routeInfo = app('request')->route();

        return array_get($routeInfo[2], $name, $default);
    }
}

就这么用吧。

可能你会问我为什么要自己去 request 中拿 route 的 parameter,因为我在 policy 中要用。

原文链接:https://www.lijinma.com/blog/2016/12/05/ge...

写文字大部分时候是因为我希望能帮助到你,小部分时候是想做总结或做记录。我的微信是 lijinma,希望和你交朋友。 以下是我的公众账号,会分享我的学习和成长。
lijinma
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 4

很棒,代码好用!和 laravel 不一样还是因为 lumen 的路由使用的是 https://github.com/nikic/FastRoute 而不是 laravel router 的原因。正因为这样,Form Requests 也不能在 lumen 下使用了。

7年前 评论
lijinma
7年前 评论

路由group 的嵌套问题是个硬伤

7年前 评论
幽弥狂

改了改。。。。

if (!function_exists('route_parameter')) {
    /**
     * Get a given parameter from the route.
     *
     * @param $name
     * @param null $default
     * @return mixed
     */
    function route_parameter($name, $default = null)
    {
        $routeInfo = app('request')->all();
        return isset($routeInfo[$name]) && $routeInfo[$name] ? $routeInfo[$name] : $default;
    }
}
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!