lukzgois/sanitizer

一个用于数据清理的包。

0.3.1 2015-08-19 01:21 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:17:58 UTC


README

Sanitizer 是一个包,可以在一个单独的层面对您的应用程序数据进行清理。

在应用中,有时需要中间层来执行数据清理,通常这些数据来自用户表单。例如,您希望在将数据发送到数据库之前清理表单字段中的空白字符。

此包基于 Jeffrey Way 关于清理器的优秀课程。 https://github.com/laracasts/Sanitizers-and-PHPSpec

安装

您可以通过 composer 安装此包。要将包自动添加到您的 composer.json 文件中,请执行以下命令:

composer require lukzgois/sanitizer

或者,您可以选择手动添加以下内容:

{
	"require": {
		"lukzgois/sanitizer" : "0.2.x"
	}
}

使用

创建一个继承自 Lukzgois\Sanitizer\Sanitizer 的类

<?php
    
use Lukzgois\Sanitizer\Sanitizer;

class SanitizeRequest extends Sanitizer {

    public function rules()
    {
        return [
            'first_name' => 'trim|ucword',
            'last_name' => 'trim|ucwords'
        ];
    }
}

使用 sanitize 方法并传入要验证的数据数组

<?php

$data = ['name' => '  john doe '];
$sanitizer = new SanitizeRequest();
$sanitizedData = $sanitizer->sanitize($data);
var_dump($sanitizedData); // ['name' => 'John Doe']

您可以通过将数组作为 sanitize() 函数的第二个参数传递来覆盖清理规则

    $sanitizer->sanitize($data, ['name' => 'strtoupper']);

要在类中使用自定义方法,只需创建以 "sanitize" 为前缀的方法即可

<?php

use Lukzgois\Sanitizer\Sanitizer;

class SanitizeRequest extends Sanitizer {

    public function rules()
    {
        return [
            'phone' => 'phone',
        ];
    }
    
    public function sanitizePhone($value)
    {
        return str_replace('-','', $value);
    }
}

您还可以使用其他类来执行清理,只需指定该类的完整路径。默认情况下,包会查找该类中的 sanitize() 函数。要使用其他函数,只需在类名后使用一个 @ 符号即可

<?php

use Lukzgois\Sanitizer\Sanitizer;

class SanitizeRequest extends Sanitizer {

    public function rules()
    {
        return [
            'first_name' => '\App\Sanitizers\NameSanitizer', // sanitize()
            'last_name' => '\App\Sanitizers\NameSanitizer@lastName' // lastName()
        ];
    }
}

还可以使用以下方式传递自定义函数的参数

<?php

use Lukzgois\Sanitizer\Sanitizer;

class SanitizeRequest extends Sanitizer {

    public function rules()
    {
        return [
            'first_name' => '\App\Sanitizers\MinValueSanitizer:100', // sanitize()
        ];
    }

}

class \App\Sanitizers\MinValueSanitizer {

    public function sanitize($value, $min)
    {
        return $value < $min ? $min : $value;
    }

}

注意:您还可以向自定义方法传递参数。

默认情况下,包包含一个自定义函数,名为 default,用于在字段为空或空值时定义默认值,例如

<?php

use Lukzgois\Sanitizer\Sanitizer;

class SanitizeRequest extends Sanitizer {

    public function rules()
    {
        return [
            'name' => 'trim|ucwords',
            'company' => 'default:1'
        ];
    }

}
    
<?php

$data = ['name' => '  john doe '];
$sanitizer = new SanitizeRequest();
$sanitizedData = $sanitizer->sanitize($data);
var_dump($sanitizedData); // ['name' => 'John Doe', 'company' => 1]

类型转换清理器

"cast" 清理器允许转换变量的类型,例如,将作为字符串接收的值转换为整数。支持以下类型: 字符串、整数、布尔型和浮点型

<?php

use Lukzgois\Sanitizer\Sanitizer;

class SanitizeRequest extends Sanitizer {

    public function rules()
    {
        return [
            'age' => 'cast:integer',
        ];
    }

}
    
<?php

$data = ['age' => '25'];
$sanitizer = new SanitizeRequest();
$sanitizedData = $sanitizer->sanitize($data);
var_dump($sanitizedData); // ['age' => (int)25]

默认情况下,即使发送的值为 null,也会执行此清理器。如果您希望它忽略 null 值,只需将第三个参数设置为 false

    public function rules()
    {
        return [
            'age' => 'cast:integer:false',
        ];
    }
    

Laravel 5 生成器

如果您正在使用 Laravel 5,可以使用 artisan 工具自动创建清理器。

为此,请在 app/config/app.php 文件中的 providers 部分添加以下行

'Lukzgois\Sanitizer\Laravel\SanitizerServiceProvider',

完成后,请使用以下命令:

php artisan make:sanitizer CreateUserSanitizer

新的清理器将创建在 app/Sanitizers 文件夹中,内容如下:

<?php namespace App\Sanitizers;

use Lukzgois\Sanitizer\Sanitizer;

class CreateUserSanitizer extends Sanitizer {

    public function rules()
    {
        return [
        ];
    }

}