carbonclean/sanitizer

PHP 和 Laravel 框架的清理库。

v1.0 2021-08-02 01:57 UTC

This package is auto-updated.

Last update: 2024-09-29 06:21:40 UTC


README

GitHub release (latest by date) GitHub Workflow Status

PHP 和 Laravel 框架的清理库。

安装

composer require carbonclean/sanitizer

用法

use CarbonClean\Sanitizer\Sanitizer;

$data = [
    'title' => ' ',
    'name' => ' John Doe ',
    'birth_date' => '06/25/1980',
    'email' => 'JOHn@DoE.com',
    'json' => '{"name":"value"}',
];

$filters = [
    'title' => 'trim|empty_string_to_null',
    'name' => 'trim|empty_string_to_null|capitalize',
    'birth_date' => 'trim|empty_string_to_null|format_date:"m/d/Y","F j, Y"',
    'email' => ['trim', 'empty_string_to_null', 'lowercase'],
    'json' => 'cast:array',
];

$sanitizer = new Sanitizer($data, $filters);

var_dump($sanitizer->sanitize());

将导致

[
    'title' => null,
    'name' => 'John Doe',
    'birth_date' => 'June 25, 1980',
    'email' => 'john@doe.com',
    'json' => ['name' => 'value'],
];

Laravel

在 Laravel 中,您可以通过 Facade 使用 Sanitizer。

$newData = \Sanitizer::make($data, $filters)->sanitize();

您还可以通过使用 SanitizesInput trait 并添加一个返回要应用于输入的过滤器的 filters 方法,在您的 FormRequests 中对输入进行清理。

namespace App\Http\Requests;

use CarbonClean\Sanitizer\Laravel\SanitizesInput;

class MyAwesomeRequest extends Request
{
    use SanitizesInput;
    
    public function filters()
    {
        return [
            'name' => 'trim|capitalize',
        ];
    }
}

可选

如果您计划为所有 HTTP 请求使用清理器,您可以可选地禁用 Laravel 的 TrimStringsConvertEmptyStringsToNull 中间件。

protected $middleware = [
    [...]
    // \App\Http\Middleware\TrimStrings::class,
    // \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    [...]
];

然后,您可以使用 trimempty_string_to_null 过滤器

$filters = [
    'some_string_parameter' => 'trim|empty_string_to_null',
];

可用过滤器

以下过滤器是默认可用的

自定义过滤器

可以使用闭包或实现 CarbonClean\Sanitizer\Contracts\Filter 接口类的名称。

class RemoveStringsFilter implements \CarbonClean\Sanitizer\Contracts\Filter
{
    public function apply($value, array $options = [])
    {
        return str_replace($options, '', $value);
    }
}

$filters = [
    'remove_strings' => RemoveStringsFilter::class,
    'password' => fn ($value, array $options = []) => sha1($value),
];

$sanitize = new Sanitizer($data, $filters);

Laravel

您可以通过像 Laravel 中的 Validator 库一样调用 extend 从 ServiceProvider 中添加自己的自定义过滤器来轻松扩展清理器库。

\Sanitizer::extend($filterName, $closureOrClassName);