Есть ли способ определить значение по умолчанию (или заставить callback вызываться каждый раз) при использовании filter_var_array
а также FILTER_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
вариант. Поэтому не должно быть сверхъестественным иметь значение по умолчанию для фильтров обратного вызова. Я что-то упускаю из виду?
Спасибо
Итак, после некоторых комментариев и копаний фильтры в php обрабатывают только то, что содержит входной массив.
Поэтому, если вы хотите гарантировать, что пользовательский обратный вызов всегда вызывается, даже если входной массив не содержит пару ключ => значение, вы можете сделать:
$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
}
]
]);
Других решений пока нет …