clazz/typed-sanitizer

A Typed Sanitizer For PHP

1.0.6 2017-06-08 02:31 UTC

This package is not auto-updated.

Last update: 2024-05-11 16:18:22 UTC


README

如何安装?

推荐使用composer进行安装:

composer require clazz/typed-sanitizer

使用说明

这个净化器可以用于净化外部输入(用户输入、接口输入)。 啥也不说了,上段代码试试:

use Clazz\Typed\Types\Type;

// 假设有个接口想要一个用户的数据,而外部输入是这样:
$input = [
    'id' => '123',
    'name' => ' James William ',
    'age' => '12',
    'isMale' => '1',
];

// 可以定义我们想要的是这样的:
$userDefinition = Type::arr([
    'id'     => 'int',
    'name'   => Type::string()->trim()->length('< 30'),
    'age'    => Type::int()->isRequired(),
    'isMale' => Type::boolean(),
]);

// 然后就可以执行净化了:
$sanitizedUserData = $userDefinition->sanitize($input);

// 看看得到的数据,果然是预期的:
var_export($sanitizedUserData);
//输出:
//    array (
//      'id' => 123,
//      'name' => 'James William',
//      'age' => 12,
//      'isMale' => true,
//    )

为了方便使用,本库还提供了两个工具类: Clazz\Typed\SanitizerClazz\Typed\Illuminate\Support\Facades\Input.

使用Clazz\Typed\Sanitizer可以省去定义Type,修改后的示例:

use Clazz\Typed\Types\Type;
use Clazz\Typed\Sanitizer;

// 假设有个接口想要一个用户的数据,而外部输入是这样:
$input = [
    'id' => '123',
    'name' => ' James William ',
    'age' => '12',
    'isMale' => '1',
];

// 类型定义 + 执行净化了:
$sanitizedUserData = Sanitizer::getSanitized([
         'id'     => 'int',
         'name'   => Type::string()->trim()->length('< 30'),
         'age'    => Type::int()->isRequired(),
         'isMale' => Type::boolean(),
     ], $input);

Laravel/Lumen中使用Clazz\Typed\Illuminate\Support\Facades\Input就更方便了 —— 它会默认从HTTP请求中获取输入:

use Clazz\Typed\Types\Type;
use Clazz\Typed\Illuminate\Support\Facades\Input;

// 假设有个接口想要一个用户的数据,而HTTP的输入参数是这样:
// id=123&name=%20%20James%20William%20%20&age=12&isMale=1


// 类型定义 + 执行净化了:
$sanitizedUserData = Input::getSanitized([
         'id'     => 'int',
         'name'   => Type::string()->trim()->length('< 30'),
         'age'    => Type::int()->isRequired(),
         'isMale' => Type::boolean(),
     ]);