calamarmihai / laravel-request-sanitizer
数据清洗器和Laravel表单请求,带有输入清洗功能。
Requires
- nesbot/carbon: ^2.0
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-03 18:21:08 UTC
README
简介
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,这是此仓库的来源。遗憾的是,它似乎不再维护了。