我有一个GET
端点,它接受一个布尔值active
和一个整数ID
作为查询参数。比如GET /stuff?active=1&ID=10
。
这两个参数都不是必需的。
如果我执行GET /stuff?active=1
,并尝试通过执行$request->get('active')
从Request
中检索值,我将获得1
作为字符串的值。
如果启用了declare(strict_types=1)
,并且在服务(如
public function getBy(bool $active = null) {
...
}
在Controller
中调用该方法,
$controllerMethod->getBy($request->get('active'))
会导致Argument #0 ($active) must be of type ?bool, string given
,这显然是不好的。
我的问题是是否有办法在请求参数到达Controller
之前对其进行强制转换?也许在FormRequest
类以某种方式?
我很清楚我可以在Controller
中做$request->has('active') ? $request->get('active') : null
,但这只是额外的混乱,我想搬到其他地方。
5条答案
按热度按时间hmmo2u0o1#
将其外包给 FormRequest 类应使用以下任一项:
或者甚至在内部验证之前执行相同的操作:
文件
cgvd09ve2#
1路(吸气剂)
2路(覆盖)
gopyfrb33#
使用
mergeIfMissing
。您可以创建自己的自定义中间件,并将下面的内容放入其中,或者在Controller的构造函数中调用下面的内容(取决于您的设计)
9rbhqvlz4#
好吧,我们都同意查询参数是字符串!
您可以做的事情:
vx6bjr1n5#
你可以为此创建一个middleware并尝试重新设置参数: