ws下分页报Call to a member function path() on null

as5739

问题描述

LaravelDb
websocket模式下,请求参数$page通过websocket json传输,自行解析,传入后报错。
看报错是request()中没有拿到参数,但参数通过websocket传,如果是自己解析的话,好像是拿不到这些

->paginate() 有一样的问题

程序代码

$data = ImRecord::orderBy('id', 'desc')
    ->simplePaginate(page: $page);

报错信息

Error: Call to a member function path() on null in D:\phpstudy_pro\WWW\im\vendor\workerman\webman-framework\src\support\bootstrap\LaravelDb.php:104
Stack trace:
#0 [internal function]: support\bootstrap\LaravelDb::support\bootstrap\{closure}()
#1 D:\phpstudy_pro\WWW\im\vendor\illuminate\pagination\AbstractPaginator.php(481): call_user_func(Object(Closure))
#2 D:\phpstudy_pro\WWW\im\vendor\illuminate\database\Eloquent\Builder.php(918): Illuminate\Pagination\AbstractPaginator::resolveCurrentPath()
#3 D:\phpstudy_pro\WWW\im\app\support\utils\WebSocketUtils.php(93): Illuminate\Database\Eloquent\Builder->simplePaginate(15, Array, 'page', 1)

截图报错信息里报错文件相关代码(没有请删除此项)

触发报错的步骤

这里写触发报错的步骤

操作系统及workerman/webman等框架组件版本

"workerman/webman-framework": "^1.4.3",
"webman/gateway-worker": "^1.0"
"illuminate/database": "^9.34",
"illuminate/pagination": "^9.34",
775 2 0
2个回答

nitron

request应该是针对HTTP的

  • as5739 2022-10-14

    是的,http可以,但这些判断在webman框架底层,是不是我在websocket下就用不了paginate这些分页方法了。。

  • nitron 2022-10-14

    是,要自行实现

walkor

改下本地 vendor/workerman/webman-framework/src/support/bootstrap/LaravelDb.php ,你截图里代码改成这样

        if (class_exists(Paginator::class)) {
            Paginator::queryStringResolver(function () {
                $request = request();
                return $request ? $request->queryString(): '';
            });
            Paginator::currentPathResolver(function () {
                $request = request();
                return $request ? $request->path(): '';
            });
            Paginator::currentPageResolver(function ($page_name = 'page') {
                $request = request();
                if (!$request) {
                    return 1;
                }
                $page = (int)($request->input($page_name, 1));
                return $page > 0 ? $page : 1;
            });
        }
  • as5739 2022-10-14

    谢谢老大,可以了

  • walkor 2022-10-14

    好的,你先本地这么改着,下个版本兼容下这个问题

年代过于久远,无法发表回答
×
🔝