ttbooking/sanitizer

数据清理器,与 Laravel 8 表单请求结合使用,具有输入清理功能。

1.0.20 2024-02-21 15:26 UTC

This package is auto-updated.

Last update: 2024-09-21 16:42:52 UTC


README

Latest Version on Packagist Software License Total Downloads

关于 WAAVI

WAAVI 是一家西班牙网络开发和产品咨询公司,自 2013 年以来一直与初创公司和其它在线企业合作。需要在 Laravel 或 PHP 中完成工作?请通过 waavi.com 联系我们。

简介

WAAVI Sanitizer 提供了一种简单的方式来格式化用户输入,无论是通过提供的过滤器还是通过自定义过滤器,这些自定义过滤器可以轻松添加到清理器库中。

尽管 WAAVI Sanitizer 并不限于 Laravel 5 用户,但它为此框架提供了一些扩展,例如通过自定义 FormRequest 简单地清理用户输入以及更易于扩展。

示例

给定以下格式的数据数组

    $data = [
        'first_name'    =>  'john',
        'last_name'     =>  '<strong>DOE</strong>',
        'email'         =>  '  JOHn@DoE.com',
        'birthdate'     =>  '06/25/1980',
        'jsonVar'       =>  '{"name":"value"}',
        'description'   =>  '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>',
        'phone'         =>  '+08(096)90-123-45q',
        'country'       =>  'GB',
        'postcode'      =>  'ab12 3de',
    ];

我们可以轻松地使用我们的清理器以及一些清理器的默认过滤器来格式化它

    use \Waavi\Sanitizer\Sanitizer;

    $filters = [
        'first_name'    =>  'trim|escape|capitalize',
        'last_name'     =>  'trim|escape|capitalize',
        'email'         =>  'trim|escape|lowercase',
        'birthdate'     =>  'trim|format_date:m/d/Y, Y-m-d',
        'jsonVar'       =>  'cast:array',
        'description'   =>  'strip_tags',
        'phone'         =>  'digit',
        'country'       =>  'trim|escape|capitalize',
        'postcode'      =>  'trim|escape|uppercase|filter_if:country,GB',
    ];

    $sanitizer  = new Sanitizer($data, $filters);
    var_dump($sanitizer->sanitize());

这将产生以下结果

    [
        'first_name'    =>  'John',
        'last_name'     =>  'Doe',
        'email'         =>  'john@doe.com',
        'birthdate'     =>  '1980-06-25',
        'jsonVar'       =>  '["name" => "value"]',
        'description'   =>  'Test paragraph. Other text',
        'phone'         =>  '080969012345',
        'country'       =>  'GB',
        'postcode'      =>  'AB12 3DE',
    ];

它的使用方式与 Laravel 的 Validator 模块非常相似,对于那些已经熟悉它的人来说,尽管使用这个库不需要 Laravel。

过滤器按照在 $filters 数组中定义的顺序应用。对于每个属性,过滤器由 | 分隔,选项通过在参数列表后附加逗号分隔的列表来指定(见 format_date)。

可用过滤器

以下过滤器是默认可用的

添加自定义过滤器

您可以通过将自定义过滤器数组传递给清理器构造函数的第三个参数来添加自己的过滤器。对于每个过滤器名称,必须提供一个闭包或实现 Waavi\Sanitizer\Contracts\Filter 接口的类的完整类路径。闭包必须始终接受两个参数:$value 和一个 $options 数组

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

    $customFilters = [
        'hash'   =>  function($value, $options = []) {
                return sha1($value);
            },
        'remove_strings' => RemoveStringsFilter::class,
    ];

    $filters = [
        'secret'    =>  'hash',
        'text'      =>  'remove_strings:Curse,Words,Galore',
    ];

    $sanitize = new Sanitize($data, $filters, $customFilters);

安装

要安装,只需运行

composer require waavi/sanitizer ~1.0

安装完成!如果您使用 Laravel,为了能够访问一些额外功能,您必须在 config/app.php 的 providers 数组中注册服务提供者,以及清理器外观

    'providers' => [
        ...
        Waavi\Sanitizer\Laravel\SanitizerServiceProvider::class,
    ];

    'aliases' => [
        ...
        'Sanitizer' => Waavi\Sanitizer\Laravel\Facade::class,
    ];

Laravel 附加功能

如果您使用 Laravel,您可以通过外观使用清理器

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

您还可以通过在服务提供者中调用 extend,就像您在 Laravel 中对 Validator 库所做的扩展一样,轻松扩展清理器库

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

您还可以通过使用 SanitizesInput 特性并在返回要应用的过滤器的 filters 方法中添加,在自己的 FormRequests 中清理输入

    namespace App\Http\Requests;

    use App\Http\Requests\Request;
    use Waavi\Sanitizer\Laravel\SanitizesInput;

    class SanitizedRequest extends Request
    {
        use SanitizesInput;

        public function filters()
        {
            return [
                'name'  => 'trim|capitalize',
                'email' => 'trim',
                'text'  => 'remove_strings:Curse,Words,Galore',
            ];
        }

        public function customFilters()
        {
            return [
                'remove_strings' => RemoveStringsFilter::class,
            ];
        }

        /* ... */

要生成清理请求,只需执行包含的 Artisan 命令

php artisan make:sanitized-request TestSanitizedRequest

与 Laravel FormRequest 的唯一区别是,现在您将有一个额外的 'fields' 方法,您可以在其中输入希望应用的输入过滤器,并且输入将在验证之前被清理。

许可证

WAAVI Sanitizer 是开源软件,许可协议为 MIT 许可证