calamarmihai/laravel-request-sanitizer

数据清洗器和Laravel表单请求,带有输入清洗功能。

dev-master 2023-08-03 15:53 UTC

This package is auto-updated.

Last update: 2024-09-03 18:21:08 UTC


README

https://github.com/binary-cats/sanitizer/actions https://github.styleci.io/repos/316763653 https://scrutinizer-ci.com/g/binary-cats/sanitizer/ Build Status

简介

Sanitizer为您的Laravel应用程序提供了一种简单的方式来格式化用户输入,无论是通过提供的过滤器还是通过可以轻松添加到Sanitizer库中的自定义过滤器。

示例

给定一个以下格式的数据数组

    $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',
    ];

我们可以轻松地使用我们的Sanitizer和Sanitizer的一些默认过滤器对其进行格式化

    use calamar-mihai\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)。

可用过滤器

以下过滤器是开箱即用的

添加自定义过滤器

您可以通过将自定义过滤器数组传递给Sanitize构造函数作为第三个参数来添加自己的过滤器。对于每个过滤器名称,必须提供闭包或实现calamar-mihai\Sanitizer\Contracts\Filter接口的类的完整类路径。

use calamar-mihai\Sanitizer\Contracts\Filter;

class RemoveStringsFilter implements Filter
{
    /**
     * Apply filter
     *
     * @param  mixed $value
     * @param  array  $options
     * @return string
     */
    public function apply($value, $options = [])
    {
        return str_replace($options, '', $value);
    }
}

闭包必须始终接受两个参数:$value和$options数组

$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 binary-cats/sanitizer

安装完成!如果您使用Laravel,则应用程序将自动注册Service提供程序以及Sanitizer外观

如果您愿意手动操作,则需要将值添加到您的config/app.php

    'providers' => [
        ...
        calamar-mihai\Sanitizer\Laravel\SanitizerServiceProvider::class,
    ];

    'aliases' => [
        ...
        'Sanitizer' => calamar-mihai\Sanitizer\Laravel\Facade::class,
    ];

Laravel小工具

如果您正在使用Laravel,则可以通过外观使用Sanitizer

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

您还可以通过调用像在Laravel中扩展Validator库一样从ServiceProvider调用extend来轻松扩展Sanitizer库,如下所示

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

您还可以通过使用SanitizesInput特质在您的FormRequests中清洗输入,并添加一个返回您希望应用于输入的过滤器的filters方法。

    namespace App\Http\Requests;

    use App\Http\Requests\Request;
    use calamar-mihai\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'方法来输入您希望应用的输入过滤器,并且输入将在验证之前被清洗。

许可

Sanitizer是开源软件,根据MIT许可授权。

感谢

非常感谢原始的WAAVI Sanitizer,这是此仓库的来源。遗憾的是,它似乎不再维护了。