Laravel 5.8中Voyager Translator分页调用时links方法不存在如何解决
问题原因
当你直接对paginate()返回的LengthAwarePaginator实例调用translate()方法时,Voyager的Translatable逻辑会将整个分页实例转换为自定义的翻译集合类,丢失了原分页实例的分页相关方法(包括links()),因此会报方法不存在的错误。
解决方案
推荐两种适配Laravel 5.8环境的实现方式,都可以保留原分页器的功能同时完成数据翻译:
- 方式1:通过
through方法直接处理分页项(写法更简洁)
直接在分页实例上调用Laravel分页器自带的through方法,对每个数据项单独做翻译,不会修改分页器本身结构:
$data = Post::where('status', 1)->paginate(15)->through(function ($item) { return $item->translate(); });
- 方式2:单独提取分页集合做转换
先获取分页实例,再对其中的数据集合做翻译替换:
// 先获取分页实例 $data = Post::where('status', 1)->paginate(15); // 对分页内的集合做翻译处理后替换回去 $data->setCollection($data->getCollection()->map(function ($item) { return $item->translate(); }));
完成上述处理后,你在Blade视图中就可以正常调用$data->links()渲染分页链接,同时每个数据项也已经完成了翻译。
内容的提问来源于stack exchange,提问作者Aagiidu
相关产品推荐
相关产品推荐

