fadion / sanitizer
输入清理器。独立使用或用于Laravel的FormRequest
Requires
- php: >=5.5.9
Requires (Dev)
- phpunit/phpunit: 5.2.*
This package is auto-updated.
Last update: 2024-09-21 20:56:17 UTC
README
一个独立的输入清理器,提供了易于在Laravel的FormRequest中使用的选择。它为大多数使用场景提供了良好的清理器选择,从修剪和转换为掩码和类型转换。
你问的是有什么用途?用户输入相当任意!即使有指南,也无法期望用户以你希望的方式输入适当的信息。验证确保输入格式正确,但不应止于此。一个电子邮件可能需要删除空格,一个名字可能需要首字母大写,等等。与其手动完成所有这些,不如让Sanitizer变得轻而易举。
安装
- 将包添加到您的composer.json文件中,并运行
composer update
{
"require": {
"fadion/sanitizer": "~1.0"
}
}
Laravel用户可以添加ServiceProvider和Facade以提高便利性。此步骤对于FormRequest不是必需的。
- 将
Fadion\Sanitizer\SanitizerServiceProvider::class添加到您的config/app.php文件中的providers数组。 - 在您的
config/app.php文件中的aliases数组中添加一个新的别名:'Sanitizer' => Fadion\Sanitizer\Facades\Sanitizer::class。
用法
您需要一个要清理的输入数组,最有可能来自请求对象或纯POST/GET数据。一个基本的例子如下
use Fadion\Sanitizer\Sanitizer; $inputs = ['name' => 'John', 'age' => 31]; $sanitizers = ['name' => 'trim', 'age' => 'int']; $sanitizer = new Sanitizer; $newInputs = $sanitizer->run($inputs, $sanitizers);
清理器数组需要输入名称作为键,一个列表,可以是数组,也可以是使用管道分隔的字符串(Laravel的验证器风格)。
这两者都是有效的
$sanitizersOne = [ 'name' => ['trim', 'ucfirst'], 'age' => 'int' ]; $sanitizersSecond = [ 'name' => 'trim|ucfirst', 'age' => 'int' ];
对于需要在对输入运行一些自定义代码的情况,您可以传递一个闭包作为清理器。不要将闭包清理器与自定义清理器混淆;这些是一次性、匿名的清理器,不能重复使用。与预定义的清理器一样,它们可以与其他清理器结合使用。看看以下代码
$sanitizers = [ 'name' => ['trim', function($value) { return str_replace('John', 'Will', $value); }], 'age' => function($value) { return $value + 100; } ];
一些清理器接受参数,如date、number_format、limit、mask和int。语法描述如下
$sanitizers = [ 'expire' => 'date:m/d/Y', 'number' => 'number_format:3', 'body' => 'limit:100', 'credit_card' => 'mask:+' ];
Laravel中的用法
在Laravel中,如果您喜欢,可以直接使用Facade。只需记住按照说明包括ServiceProvider和Facade。之后,就像写代码一样简单
$inputs = [/* some inputs */]; $sanitizers = [/* some sanitizers */]; $newInputs = Sanitizer::run($inputs, $sanitizers);
FormRequest中的用法
在我看来,表单请求是编写验证代码的一种非常好的方式。除了验证之外,您还可以使用Sanitizer以非常直观的方式清理和转换您的输入。
您已经知道如何创建FormRequest并将其添加到规则中。让我们看看如何清理这些输入
namespace App\Http\Requests; use Fadion\Sanitizer\FormRequest\Sanitizable; class UserRequest extends Request { use Sanitizable; public function rules() { return [ 'name' => 'required', 'email' => 'required|email', ]; } public function sanitizers() { return [ 'name' => 'ucwords', 'email' => 'trim|lower' ]; } }
您会注意到我使用了Sanitizable特质!这就是包括所需功能并允许定义清理器的原因。您还会注意到有一个sanitizers()方法。只需返回一个以输入为键的数组,Sanitizer就会自动完成工作。
自定义清理器
对于大多数人来说,预定义的清理器就足够了。然而,在某些罕见的情况下,您可能需要多次运行某些特定代码,并且将它们注册为自定义清理器可能会有所帮助。只需记住,复杂的逻辑不属于Sanitizer或FormRequest。仅将这些用于简单的、微不足道的转换。
独立
在任何地方调用静态注册方法,但在清理器被使用之前。
\Fadion\Sanitizer\Sanitizer::register('upper_some', function($value) { $some = mt_rand(1, strlen($value) - 1); return strtoupper(substr($value, 0, $some)).substr($value, $some); });
Laravel
注册自定义消毒器的最佳位置是在服务提供者中。它可以是一个自定义的专用提供者(例如:SanitizerServiceProvider),也可以是在更通用的AppServiceProvider中。无论你选择哪个,都应在boot()方法中编写你的代码。
// some service provider public function boot() { \Fadion\Sanitizer\Sanitizer::register('upper_some', function($value) { $some = mt_rand(1, strlen($value) - 1); return strtoupper(substr($value, 0, $some)).substr($value, $some); }); }
注册方法接受一个名称和一个闭包。你可以注册所需的任何数量的自定义消毒器,甚至可以覆盖预定义的消毒器。现在你可以在代码的任何地方使用新创建的消毒器。
$sanitizers = [ 'name' => 'trim|upper_some' ];
可用的过滤器
有超过30个可用的过滤器,其中大多数使用原生PHP函数。请参阅Filters.php文件以获取完整列表。每个方法都有文档说明,但代码对每个人来说都很直观易懂。