netherphp / input
输入处理。
v4.1.1
2022-06-21 02:59 UTC
Requires
- php: >=8.0
- netherphp/object: >=3.0.0
- netherphp/option: >=1.0.0
Requires (Dev)
- phpunit/phpunit: ^9.5
README
一个输入过滤接口。它允许您定义一组动态过滤器,对输入进行即时应用。
超级简单的示例
$input = (new Nether\Input\Filter)
->Email(function($t){ return filter_var($t,FILTER_VALIDATE_EMAIL); });
// ... some time later...
$input->SetDataset($_POST);
if(!$input->Email) {
throw new Exception('valid email address is required.');
}
为了实现这一点,您的HTML表单字段名需要遵循与PHP属性相同的规则(以字母数字和_开头)。默认情况下,它是大小写不敏感的,所以您可以从URL发送全部小写,然后在您选择的任何大小写中引用它们。如果您追求性能,则可以禁用此功能。
您可以将任何数组或对象传递给构造函数或使用SetDataset()。典型用途包括_GET和_POST,但您也可以将其应用于任何需要查看的命名数据集。您还可以随时更改数据集,同时保留任何预定义的过滤器。
另一个简单示例
假设我们想要将POST数据回填到我们的表单中,因为出现了一些验证错误。这是您可能意外开启跨站脚本问题的时候。但输入过滤器可以通过定义一个默认过滤器来为您处理这个问题,这个过滤器适用于所有没有自己特殊过滤器的字段。
$data = (new Nether\Input\Filter($_POST))
->SetDefaultFunction(function($v){ return htmlspecialchars($v) });
// ... some time later...
<input type="text" name="Username" value="<?php echo $data->Username ?>" />
创建一个新接口。
将任何对象或数组包裹在OOP接口中。
$input = new Nether\Input\Filter($_POST);
检索一个值。
从经过我们分配给该字段的所有过滤器处理后,从$_POST['myfield']中获取值。
$val = $input->MyField
设置一个值。
请注意,这不会更新原始源数组。将数据写回数据集将触发copy-on-write,因此现在您有一个自己独特的数据集,在这个例子中,不会影响原始的$_POST['myfield']。
$input->MyField = 'ten';
设置一个过滤器。
您可以通过将字段作为方法调用,传递一个具有一个参数的可调用函数来实现,该参数是值。
$input->MyField(function($t){
return str_repalce('a','@',$t);
});
检索一个过滤器。
您可以直接调用对象,传递一个字符串,该字符串是您最初定义回调的字段名称。以下是一个在另一个字段上重用现有回调的示例。
$input->MyOtherField($input('MyField'));
安装
在composer.json中要求此包。
require {
"netherphp/input": "~1.0.0"
}
然后安装它或更新它。
$ composer install --no-dev
$ composer update --no-dev
测试
此库使用Codeception进行测试。Composer会为您处理。安装或更新它。
$ composer install --dev
$ composer update --dev
然后运行测试。
$ php vendor/bin/codecept run unit
$ vendor\bin\codecept run unit