fadion/sanitizer

输入清理器。独立使用或用于Laravel的FormRequest

1.0 2016-03-28 21:15 UTC

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;
    }
];

一些清理器接受参数,如datenumber_formatlimitmaskint。语法描述如下

$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文件以获取完整列表。每个方法都有文档说明,但代码对每个人来说都很直观易懂。