2016-12-16 3 views
1

filter_var_arrayFILTER_CALLBACKを使用すると、デフォルト値を定義する方法(またはコールバックを毎回強制的に呼び出す方法)がありますか?デフォルト値のPHPフィルタコールバック

例データ:

{ 
    "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オプションがあります。したがって、コールバックフィルタのデフォルト値を持つことは超自然ではありません。私は明白な何かを欠いていますか

おかげ

+0

はそれが可能だとは思いません。 。それは、既存のデータをフィルタリングすることになっており、何も作成していない... – Narf

+0

あなたは正しいようです。デフォルト値はバリデーター(boolean、intなど)が入力を検証しない場合のみです。入力がここにない場合(TRUEがfilter_var_arrayの3パラメータであっても)ではありません。ありがとう – rekam

答えて

0

OKいくつかのコメントや掘削後、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 
     } 
    ] 
]); 
関連する問題