如何从输入过滤器中排除可选参数



我在我的REST API中使用laminas-inputfilter, laminas-filter和laminas-validator。

我的过滤器配置看起来像这样,例如:

'input_filter_specs' => [
MyResource::class . '\Validator' => [
'param1' => ...,
'param2' => ...,
'param3' => [
'required' => false,
'allow_empty' => false,
'filters' => [
'no_tags' => [
'name' => StripTags::class,
],
'no_newlines' => [
'name' => StripNewlines::class,
],
'trim' => [
'name' => StringTrim::class,
],
],
'validators' => [
'not_empty' => [
'name' => NotEmpty::class,
],
],
],
],
],

到目前为止,过滤和验证也工作得很好。但令我惊讶的是:我向包含param1和param2的API发出请求,我故意省略了param3。但是,如果我现在查看我的REST服务接收到的数组,我发现在那里:

Array
(
[param1] => one
[param2] => two
[param3] =>
)

这意味着自动添加可选参数并填充空字符串。然而,这种行为对我来说有点不利,因为它与我的进一步进程相冲突。

是否有可能(例如通过配置开关)只验证输入参数,如果它们被设置,否则将它们从数组中排除?

您可以尝试使用验证组功能:https://docs.laminas.dev/laminas-form/quick-start/#validation-groups。您可以设置一个只包含所需参数的验证组数组,然后检查param3是否为空,在这种情况下添加到验证组数组。

最新更新