0

我在我的 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] =>
)

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

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

4

1 回答 1

1

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

于 2021-04-16T16:47:24.000 回答