carbonclean / sanitizer
PHP 和 Laravel 框架的清理库。
v1.0
2021-08-02 01:57 UTC
Requires
- php: ^7.4|^8.0
- illuminate/support: ^6.0|^7.0|^8.0
- illuminate/validation: ^6.0|^7.0|^8.0
- nesbot/carbon: ^1.0|^2.0
Requires (Dev)
- phpunit/phpunit: ^9.0
README
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 的 TrimStrings 和 ConvertEmptyStringsToNull 中间件。
protected $middleware = [ [...] // \App\Http\Middleware\TrimStrings::class, // \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, [...] ];
然后,您可以使用 trim 和 empty_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);