lukzgois / sanitizer
一个用于数据清理的包。
Requires
- php: >=5.4.0
Requires (Dev)
- phpspec/phpspec: ~2.1
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 [ ]; } }