You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10自定义分页报错:Call to a member function links() on array

问题根源

前端控制器CulinaryController.php通过HTTP请求获取API返回的分页数据后,使用json_decode(..., true)将响应转为关联数组,但Blade视图中$data->links()需要的是Laravel的LengthAwarePaginator实例,数组不存在links()方法,因此触发报错。

解决方案

方案1:将API返回的JSON数据重新封装为分页实例

修改CulinaryController.php的index方法,把API返回的JSON结构转为LengthAwarePaginator对象:

public function index(Request $request)
{
    $client = new Client();

    $qs = http_build_query($request->query());
    $qs = $qs ? '?'.$qs : '';
    $url = initURLPath("culinary" . $qs);
    $response = $client->get($url);

    // 取消第二个参数true,将JSON转为对象而非数组
    $json = json_decode((string)$response->getBody()->getContents());
    
    if ($request->query('dd')) {
        dd($json);
    }

    // 用API返回的分页字段构建Laravel分页实例
    $paginator = new \Illuminate\Pagination\LengthAwarePaginator(
        $json->data,       // 分页后的数据集
        $json->total,      // 总记录数
        $json->per_page,   // 每页条数
        $json->current_page, // 当前页码
        [
            'path' => \Illuminate\Pagination\LengthAwarePaginator::resolveCurrentPath(),
            'query' => $request->query(),
        ]
    );

    $view_data = [
        'title' => 'Browse Culinary',
        'data' => $paginator,
    ];
    return view('culinary.index', $view_data);
}

Laravel的LengthAwarePaginator返回的JSON默认包含data/total/per_page/current_page等字段,直接用这些字段重构实例即可让$data具备links()方法。

方案2:同项目内直接复用分页逻辑(推荐)

如果API和前端控制器属于同一个Laravel项目,无需走HTTP请求,直接在前端控制器处理分页:

public function index(Request $request)
{
    $perPage = $request->query('per_page', 8);
    $currentPage = $request->query('page', 1);

    // 直接用模型的paginate方法生成分页实例
    $paginator = \App\Models\Culinary::paginate($perPage, ['*'], 'page', $currentPage);
    // 保留URL中的其他查询参数
    $paginator->appends($request->query());

    $view_data = [
        'title' => 'Browse Culinary',
        'data' => $paginator,
    ];
    return view('culinary.index', $view_data);
}

该方式省去了HTTP请求和JSON转码的环节,代码更简洁,彻底避免类型不匹配问题。

内容的提问来源于stack exchange,提问作者dapidmini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:36:11