netherphp/input

输入处理。

v4.1.1 2022-06-21 02:59 UTC

This package is auto-updated.

Last update: 2024-09-21 07:29:30 UTC


README

nether.io Code Climate Build Status Packagist Packagist

一个输入过滤接口。它允许您定义一组动态过滤器,对输入进行即时应用。

超级简单的示例

$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