imgusev / sanitizer
数据清理器,以及具有输入清理功能的Laravel 5表单请求。
Requires
- ext-mbstring: *
- illuminate/support: ~5.3
- illuminate/validation: ~5.3
- nesbot/carbon: ~1.0|~2.0
Requires (Dev)
- phpunit/phpunit: ~6.0|~7.0|~8.0
README
简介
Imgusev 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', ];
我们可以很容易地使用我们的Sanitizer和Sanitizer的一些默认过滤器来格式化它
use \Imgusev\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', ]; $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',
];
它的用法与Laravel的Validator模块非常相似,对于那些已经熟悉它的人来说,尽管使用此库不需要Laravel。
过滤器按照在$filters数组中定义的顺序应用。对于每个属性,过滤器由|分隔,选项通过在参数列表后附加逗号分隔的列表来指定(见format_date)。
可用过滤器
以下过滤器是默认提供的
添加自定义过滤器
您可以通过将自定义过滤器数组传递给Sanitize构造函数作为第三个参数来添加自己的过滤器。对于每个过滤器名称,必须提供一个闭包或实现Imgusev\Sanitizer\Contracts\Filter接口的类的完整类路径。闭包必须始终接受两个参数:$value和$options数组。
class RemoveStringsFilter implements Imgusev\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 imgusev/sanitizer ~1.0
完成!如果您正在使用Laravel,为了能够访问一些额外功能,您必须在config/app.php中的providers数组中注册服务提供程序,以及Sanitizer Facade。
'providers' => [ ... Imgusev\Sanitizer\Laravel\SanitizerServiceProvider::class, ]; 'aliases' => [ ... 'Sanitizer' => Imgusev\Sanitizer\Laravel\Facade::class, ];
Laravel功能
如果您正在使用Laravel,可以通过Facade使用Sanitizer。
$newData = \Sanitizer::make($data, $filters)->sanitize();
您也可以通过从ServiceProvider调用extend,像在Laravel中扩展Validator库一样轻松地扩展Sanitizer库,如下所示
\Sanitizer::extend($filterName, $closureOrClassPath);
您还可以通过使用SanitizesInput trait在您的FormRequests中清理输入,并添加一个返回要应用于输入的过滤器的filters方法。
namespace App\Http\Requests; use App\Http\Requests\Request; use Imgusev\Sanitizer\Laravel\SanitizesInput; class SanitizedRequest extends Request { use SanitizesInput; public function filters() { return [ 'name' => 'trim|capitalize', 'email' => 'trim', ]; } /* ... */
要生成清理请求,只需执行包含的Artisan命令
php artisan make:sanitized-request TestSanitizedRequest
与Laravel FormRequest的唯一区别是,现在您将有一个额外的'fields'方法来输入您希望应用的输入过滤器,并且输入将在验证之前被清理。
许可证
IMGusev Sanitizer是开源软件,根据MIT许可证授权。