【问题标题】:PHP filter callback with default value具有默认值的 PHP 过滤器回调
【发布时间】:2017-05-02 03:34:41
【问题描述】:

在使用filter_var_arrayFILTER_CALLBACK 时,有没有办法定义默认值(或强制每次调用回调)?

示例数据:

{
    "name": "John"
}

示例用法:

$params = filter_var_array($datas_from_above, [
    'name' => FILTER_SANITIZE_STRING,
    'age' => [
        'filter' => FILTER_CALLBACK,
        'options' => function ($data) {
            // I was thinking $data would be null here
            // but this function is not called if the 
            // param is not present in the input array.
            die('stop?');
        }
    ]
], true); // Add missing keys as NULL to the return value

使用其他过滤器时,有default 选项。因此,为回调过滤器设置默认值不应该是超自然的。我错过了什么明显的东西吗?

谢谢

【问题讨论】:

  • 不认为这是可能的。它应该过滤现有数据,而不是无中生有地创建它......
  • 看来你是对的。默认值仅在验证器(布尔值、int 等)不验证输入时使用。如果输入不在此处,则不是(即使 TRUE 是 filter_var_array 的第 3 个参数)。谢谢

标签: php filter callback default-value


【解决方案1】:

好吧,经过一些 cmets 和挖掘之后,php 中的过滤器只处理输入数组包含的内容。

因此,如果您想保证始终调用自定义回调,即使输入数组不包含 key => 值对,您也可以这样做:

$partial_input = ["name" => "John"]; // E.g. from a GET request
$defaults = ["name" => null, "age" => null];

$input = array_merge($defaults, $partial_input);

$parsed = filter_var_array($input, [
    "name" => FILTER_SANITIZE_STRING,
    "age" => [
        "filter" => FILTER_CALLBACK,
        "options" => function ($data) {
            // do something special if $data === null
        }
    ]
]);

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    相关资源
    最近更新 更多