比如我的列表页,因为查询参数比较多,查询条件也多,排序方式也比较多。
之前是把http的request查询参数通过数组传到service 但是发现很多不方便,比如我上传 比如我列表搜索页。
直接在service里调用request,这样感觉方便的多。
比如之前这样的:
$userList = $this->userService->getList($request->input(), 10);
现在改成这样
$userList = $this->userService->getList(10);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这两种其实都不好,因为不能直接从Service的接口(或函数签名)看出它需要的参数。
对于参数很多的方法,可以用对象表示参数,控制器根据Request封装得到对象(对象也可以提供一个fromRequest方法)再传给Service。
补充个例子,
UserService的getList可以这样定义:看函数签名就可以知道第一个参数是
UserCriteria,后面的$limit和$offset是分页用的,也可以再封装成一个类,但是没必要。其中的
UserCriteria就是查找和筛选用户的条件:在控制器调用:
好处:
明确的类型(IDE还能自动补全)
隔离HTTP请求
但是耦合度会不会比较高呢?
不要紧的,你看laravel的分页不也是直接从Request获取参数吗。并不会有问题啊。 :)