Laravel:如何在控制器方法中修改分页参数值?
解决Laravel中用户数据自定义分页的问题
当然可以实现,给你两种简单直接的方案:
方案一:在控制器中临时修改请求参数
在调用用户服务方法前,把请求里的paginate参数替换成30,这样服务层拿到的就是30,不用改动模型里的方法:
// 复制请求对象避免影响其他逻辑(更稳妥) $userRequest = $request->clone(); $userRequest->merge(['paginate' => 30]); $users = $this->userService->getUsersPaginated($userRequest); $users = $this->vuePaginate($users);
如果当前请求仅用于用户分页逻辑,也可以直接修改原请求(不推荐用于多数据类型的请求场景):
$request->merge(['paginate' => 30]); $users = $this->userService->getUsersPaginated($request); $users = $this->vuePaginate($users);
方案二:修改模型方法,支持自定义分页值
给getUsersPaginated方法新增一个可选参数,优先使用手动传入的分页值,没有传入时再用请求参数:
User模型代码修改:
public function getUsersPaginated($request, $perPage = null) { $paginate = $perPage ?? $request['paginate']; $users = User::paginate($paginate); return $users; }
控制器调用修改:
// 直接传入30作为自定义分页值 $users = $this->userService->getUsersPaginated($request, 30); $users = $this->vuePaginate($users);
这种方式灵活性更高,后续如果需要给不同场景设置不同分页值,直接传参即可,无需修改请求对象。
内容的提问来源于stack exchange,提问作者gabogabans
相关产品推荐
相关产品推荐

